我必须将对 Oracle 数据库的访问封装在一个名为 dbconf 的 Java 类中:
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 表示我的代码一切正常。但是当我执行我的代码时 有异常(exception)!
class DB_Oracle_Connection.dbconf cannot be cast to class java.sql.Connection (DB_Oracle_Connection.dbconf is in module DB_Oracle_Connection of loader 'app'; java.sql.Connection is in module java.sql of loader 'platform')
如何解决代码中的问题?
最佳答案
您的 connect
不是实现预准备语句所期望的 Connection
接口(interface)的类。
因此将 connect
更改为 connect.getConnection()
PreparedStatement ps = connect.prepareStatement(connect.getConnection(), "INSERT INTO MKR_TEST1 VALUES ( ?, ?, ? , ?)");
或者在准备好的语句方法中使用私有(private)变量:
public PreparedStatement prepareStatement (String sql_code)
throws SQLException {
prepstat = connection.prepareStatement(sql_code);
return prepstat;
}
顺便说一句:注意 java 命名约定。类名应以大写字符开头
关于用于 Oracle 访问的 Java 代码在执行期间失败。我该如何修复我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59876191/