Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 无效操作:结果集已关闭_Java_Jakarta Ee_Jdbc - Fatal编程技术网

Java 无效操作:结果集已关闭

Java 无效操作:结果集已关闭,java,jakarta-ee,jdbc,Java,Jakarta Ee,Jdbc,当我的结果集数据很大时,我得到 com.ibm.db2.jcc.am.SqlException:[jcc][t4][10120][10898][4.9.78]无效操作:结果集已关闭。ERRORCODE=-4470,SQLSTATE=null异常,但当我尝试在resultset中使用较少的数据量时不会出现异常 下面是我的代码片段 ResultSet rs=null; String sql_query="select * from exception_main;select * from m_rol

当我的结果集数据很大时,我得到
com.ibm.db2.jcc.am.SqlException:[jcc][t4][10120][10898][4.9.78]无效操作:结果集已关闭。ERRORCODE=-4470,SQLSTATE=null
异常,但当我尝试在resultset中使用较少的数据量时不会出现异常

下面是我的代码片段

ResultSet rs=null;
String sql_query="select * from exception_main;select * from m_roles"
String query1=sql_query.toUpperCase();
String[] results=query1.split(";");         
CSVWriter writer = new CSVWriter(new FileWriter(csv_file_path + csv_file_name), ',',CSVWriter.NO_QUOTE_CHARACTER);                     
for(int i=0;i<results.length;i++)                         
{                             
  if(results[i].startsWith("SELECT"))                             
  {                                 
    System.out.println("Inside select"+ results[i]);                             

    ps = conn1.prepareStatement(results[i].toString());                             
    rs = ps.executeQuery();             

    ...                        

    //writing to csv file                          
    System.out.println("Count..." + rs.getRow());                        
    writer.writeAll(rs, true);                         

    while(rs.next()){                                  
      rs.deleteRow();                                
    }                          
    System.out.println("Count...3:::::::" + rs1.getRow());     
  }     
}
writer.close(); 
rs.close();
ResultSet rs=null;
String sql\u query=“选择*来自异常\u main;选择*来自m\u角色”
字符串query1=sql_query.toUpperCase();
String[]results=query1.split(“;”);
CSVWriter writer=新CSVWriter(新文件编写器(csv文件路径+csv文件名),',',CSVWriter.NO_QUOTE_字符);
对于(int i=0;i,从:

当一个ResultSet对象被关闭、重新执行或用于从多个结果序列中检索下一个结果时,生成它的语句对象会自动关闭该对象

这就是你的错误

每次在
for
循环中都会重新执行
stmt
语句对象

还有:

对于非保留游标,当驱动程序完成对第一个结果集的单步执行时,如果启用“自动提交”,则驱动程序将进行流式提交,这将关闭所有其他内容。如果希望其他结果集保持打开状态,则可以使用with hold游标


编辑:

(对于OP-请发布一个代码片段。不要一直更改代码片段) 答案仍然是一样的:您在
for
循环中对同一
结果集使用了两个查询。这是行不通的。如果您用不同的查询重新执行同一
语句
对象,则将关闭
结果集。可以使用不同的
语句
对象,或者使用不同的应用程序漫游并放弃此
,以实现循环想法。

保持

stmt = conn1.createStatement(); 
在for循环之前