5

When my resultset data is large I get com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][4.9.78] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null exception but not when I try with less amount of data in resultset

Below is my code snippet

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();
4

2 に答える 2

10

保つ

stmt = conn1.createStatement(); 

forループの前。

于 2012-06-12T09:42:54.130 に答える
7

Java ドキュメントから:

ResultSet オブジェクトは、Statement オブジェクトが閉じられるか、再実行されるか、複数の結果のシーケンスから次の結果を取得するために使用されると、それを生成した Statement オブジェクトによって自動的に閉じられます。

したがって、あなたのエラー。

Statementオブジェクトは、ループ内stmtで毎回再実行されています。for

また、ここから

保持されていないカーソルの場合、ドライバーが最初の ResultSet のステップ実行を終了すると、autoCommit がオンの場合、ドライバーはフロー コミットを実行し、他のすべてを閉じます。他の ResultSet を開いたままにしたい場合は、with hold カーソルを使用できます。


編集:

(OPに-スニペットを1つ投稿してください。スニペットを常に変更し続けないでください)答えは同じです。ループ内で同じに対して2つのクエリを使用ResultSetしています。forそれはうまくいきません。同じオブジェクトを別のクエリで再ResultSet実行すると、 は閉じられます。StatementStatementのオブジェクトを使用するか、別のアプローチを使用してこのforループのアイデアを破棄してください。

于 2012-06-12T09:39:41.333 に答える