Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决Java中从Callable语句检索游标时发生的异常?_Java_Database_Jdbc_Db2 - Fatal编程技术网

如何解决Java中从Callable语句检索游标时发生的异常?

如何解决Java中从Callable语句检索游标时发生的异常?,java,database,jdbc,db2,Java,Database,Jdbc,Db2,我有一个返回Db2过程,它返回一个表的游标 这个过程是从我的java代码和truing中调用的,以检索游标作为结果集,并具有流动的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:66

我有一个返回Db2过程,它返回一个表的游标

这个过程是从我的java代码和truing中调用的,以检索游标作为结果集,并具有流动的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)
我搜索了此异常的解决方案,并在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;
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());

        } 

    }
现在,在这个java代码中,代码在这一行中断
callableStatement=dbConnection.prepareCall(proc)


注意:尽管异常日志包含“Connection is closed”(连接已关闭)文本,但我想指出的是,我已成功地使用JDBC与数据库正常检索建立了连接,没有问题。

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

驱动程序说连接已关闭,而您说连接未关闭;相信谁?您可能想在
prepareCall()
之前调用连接上的
isClosed()
isValid()
?您能提供使用的产品和版本号吗?服务器操作系统、DB2和JDBC驱动程序?