Java CallableStatement错误:无法取消对void的引用

Java CallableStatement错误:无法取消对void的引用,java,Java,我试图使用CallableStament调用一个存储过程,但是当我调用该存储过程的方法时,它会返回 错误:35,62 java:void无法取消引用 代码: 公共类连接{ 公共void connDB引发异常{ Class.forNameoracle.jdbc.driver.OracleDriver; 尝试连接conn=DriverManager.getConnection jdbc:oracle:thin:@test123:4321:test1,test,test{ 如果conn!=null{

我试图使用CallableStament调用一个存储过程,但是当我调用该存储过程的方法时,它会返回

错误:35,62 java:void无法取消引用

代码:

公共类连接{ 公共void connDB引发异常{ Class.forNameoracle.jdbc.driver.OracleDriver; 尝试连接conn=DriverManager.getConnection jdbc:oracle:thin:@test123:4321:test1,test,test{ 如果conn!=null{ System.out.println已连接到数据库!; }否则{ System.out.PrintLn连接失败!; } }捕获SQLE异常{ System.err.formatSQL状态:%s\n%s,e.getSQLState,e.getMessage; }捕获异常e{ } } public void callablestatementint resync_值{ Connect CONNECTIVATEDB=新连接; CallableStatement stmt=conctivitatedb.connDB.prepareCall{call resync_entity.resync_this_entity?}; stmt.setInt1,重新同步_值; stmt.execute; } } 如果我从conndb方法在try-catch块中执行callable语句,它就可以正常工作。

您需要从void方法返回连接,以像conctivitatedb.conndb.prepareCall一样链接调用-然后您将无法关闭该连接,因此这样做将导致明确的连接泄漏。您可能应该将连接传递给您的方法,并确保至少打印您收到的任何异常。大概

public void callablestatement(Connection conn, int resync_value) {
    String qry = "{call resync_entity.resync_this_entity(?)}";
    try (CallableStatement stmt = conn.prepareCall(qry)) {
        stmt.setInt(1, resync_value);
        stmt.execute();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

不要忘了关闭与调用者的连接。

如果我在conndb方法中的try-catch块中执行callable语句,它就可以正常工作:真的捕获异常e{}connDB返回void,相反,您可能应该返回连接,这样您就可以实际调用prepareCall方法。代码是否编译?我是从数组中调用该过程的,这是否意味着我不必手动关闭连接?@GabrielAlin您可以使用资源尝试将其包装,但您没有发布该代码。重要的是要关闭连接。