用于 Oracle 访问的 Java 代码在执行期间失败。我该如何修复我的代码?

标签 java oracle jdbc

我必须将对 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/

相关文章:

java - 用于从行号和列号获取字符偏移量的现有 Java 库?

java - 我们可以在 lookbehind 表达式中使用量词吗?

java - 如何从protoc.exe获取类文件

java - 解析日期以在 JPQL 查询中进行比较

c# - decimal.Parse 方法

Oracle 索引性能选项

java - android.database.sqlite.SQLiteException : table contact_data has no column named timestamp_

java - Java中如何转义引号

java - 埃斯珀重复按需查询

java - JDBC SQLite 数据库锁定错误