如何解决从Java中的Callable语句检索CURSOR期间发生的异常?

JBa*_*aba 5 java database db2 jdbc

我有返回Db2程序,它返回一个表的光标.

从我的java代码调用此过程并修整以将游标作为结果集检索并具有流动的SQLexception异常日志,

com.ibm.db2.jcc.am.jo: [jcc][t4][10335][10366][4.7.85] 
Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003
    at com.ibm.db2.jcc.am.dd.a(dd.java:666)
    at com.ibm.db2.jcc.am.dd.a(dd.java:60)
Run Code Online (Sandbox Code Playgroud)

我搜索了这个异常的解决方案,并在ibm网站链接上发现了这个解决方案 ,建议更改日志配置,

增加日志文件大小以及主日志文件和辅助日志文件的数量.num_log_span值也可以调整.

这是程序示例,

CREATE OR REPLACE PROCEDURE ABC(c_dump OUT SYS_REFCURSOR) IS
BEGIN
  open c_dump FOR
    select feild1,feild1,.... from RSPNSE_TABLE;
END;
Run Code Online (Sandbox Code Playgroud)

Java代码如下,

public void callStoredProc(){

        Connection dbConnection = null;
        CallableStatement callableStatement = null;
        ResultSet rs = null;

        String proc = "{call ABC(?)}";

        try {
            dbConnection = connection;
            callableStatement = dbConnection.prepareCall(proc);

            callableStatement.registerOutParameter(1, DB2Types.CURSOR);


            // execute getDBUSERCursor store procedure
            callableStatement.executeUpdate();

            // get cursor and cast it to ResultSet
            rs = (ResultSet) callableStatement.getObject(1);


        } catch (SQLException e) {

            e.printStackTrace();
            System.out.println(e.getMessage());

        } 

    }
Run Code Online (Sandbox Code Playgroud)

现在在这个java代码中破解了这一行 callableStatement = dbConnection.prepareCall(proc);

注意:尽管异常日志包含"Connection is closed"文本我想提一下,我已经成功建立了与数据库正常检索的连接,使用JDBC没有问题.

ggb*_*667 0

准备调用失败表明您没有打开的连接。您必须深入研究 SQLException 并确定确切原因。