Код Java для доступа oracle не выполнен во время выполнения. Как мне исправить мой код? - PullRequest
0 голосов
/ 23 января 2020

Я должен инкапсулировать свой доступ к базе данных Oracle в один java класс, называемый dbconf:

package DB_Oracle_Connection;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;




  public class dbconf {

  private String connstr;
  private Connection connect;
  private PreparedStatement prepstat = null;

  public Connection getConnection() throws SQLException {
        connstr = "jdbc:oracle:thin:@localhost:1521:orcl";

        try {
                String uname = "fred";
                String pass = "flintstone";


                Class.forName("oracle.jdbc.driver.OracleDriver");


                connect = DriverManager.getConnection(connstr, uname, pass);

        } catch (Exception e) {
            System.out.println(e.toString());
        }
        if (connect != null) {
            System.out.println("Connected to the database!");
        } else {
            System.out.println("Failed to make connection!");
        }

            return connect;
    }


public PreparedStatement prepareStatement (Connection conn,String sql_code)
    throws SQLException {
prepstat = conn.prepareStatement(sql_code);
return prepstat;
}
} 

Во втором java классе DB_Oracle_Insert_Statement я вызываю dbconf.

package DB_Oracle_Connection;

import DB_Oracle_Connection.dbconf; 
import java.sql.Connection;
import java.sql.PreparedStatement;
public class DB_Oracle_Insert_Statement {

public static void main(String[] args) {    
try {

 dbconf connect = new dbconf();

 // create our java preparedstatement using a sql update query
 PreparedStatement ps = connect.prepareStatement((Connection) connect, "INSERT INTO MKR_TEST1       VALUES ( ?, ?, ? , ?)");

 System.out.format("INSERT MKR_TEST1 VORNAME, NACHNAME, ADRESSE\n");
 // set the preparedstatement parameters
 ps.setString(1,"zzzzzVORNAME");
 ps.setString(2,"zzzzzNACHNAME");
 ps.setString(3,"zzzzADRESSE");
 ps.setString(4,"11");

 // call executeUpdate to execute our sql update statement
 ps.executeUpdate();

 //System.out.format("COMMIT\n");

 //PreparedStatement ps1 = connect.prepareStatement(
   //      "COMMIT");
 // call executeUpdate to execute our commit statement
 //ps1.executeUpdate();

 ps.close();
}
catch (Exception e)
{
  System.err.println("Got an exception! ");
  System.err.println(e.getMessage());
}


}


}

Мой компилятор eclpise говорит, что с моим кодом все в порядке. Но когда я выполняю свой код, получаю исключение!

класс DB_Oracle_Connection.dbconf не может быть приведен к классу java. sql .Connection (DB_Oracle_Connection.dbconf находится в модуле DB_Oracle_Connection загрузчика 'app'; java. sql .Connection находится в модуле java. sql загрузчика «платформа»)

Как мне исправить проблему в моем коде?

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Ваш connect не является классом, который реализует интерфейс Connection, ожидаемый подготовленным оператором.

Поэтому измените connect на connect.getConnection()

PreparedStatement ps = connect.prepareStatement(connect.getConnection(), "INSERT INTO MKR_TEST1       VALUES ( ?, ?, ? , ?)");

или используйте вашу личную переменную в вашем подготовленном методе выписки:

public PreparedStatement prepareStatement (String sql_code)
    throws SQLException {
    prepstat = connection.prepareStatement(sql_code);
    return prepstat;
}

Кстати: соблюдайте java соглашения об именах. Имена классов должны начинаться с заглавной буквы

0 голосов
/ 23 января 2020

ваш класс не может быть преобразован в класс Connection. Это не в иерархии наследования. Таким образом, чтобы правильно получить объект соединения, просто вызовите ваш метод getConnection() таким образом в классе DB_Oracle_Insert_Statement

...
public static void main(String[] args) {    
try {

 dbconf connect = new dbconf();

 // create our java preparedstatement using a sql update query
 PreparedStatement ps = connect.prepareStatement(connect.getConnection(), "INSERT INTO MKR_TEST1       VALUES ( ?, ?, ? , ?)");
...
...