2012-06-12 13 views
5

Quando il mio dati di risultati è grande ottengo com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][4.9.78] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null eccezione, ma non quando provo con meno quantità di dati in gruppo di risultativalido funzionamento: set di risultati è chiuso

Di seguito è riportato il mio frammento di codice

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

risposta

10

Tenere

stmt = conn1.createStatement(); 

prima del ciclo for.

7

Da il Java docs:

Un oggetto ResultSet viene automaticamente chiuso dall'oggetto Statement che lo ha generato quando quell'oggetto Statement è chiuso, ri-eseguito o viene utilizzato per recuperare il n est risultato da una sequenza di risultati multipli.

Quindi il tuo errore.

L'oggetto stmt viene rieseguito ogni volta nel ciclo for.

Inoltre, from here:

Per i cursori non-luogo, quando il conducente termina passando attraverso il primo ResultSet, il conducente scorrerà commettere se autoCommit è acceso, e che si chiuderà tutto il resto. Se si desidera che l'altro ResultSet rimanga aperto, è possibile utilizzare il cursore di mantenimento.


EDIT:

(al PO - gentilmente inviare un frammento Non continuare a cambiare frammenti tutto il tempo.) la risposta è sempre la stessa: si sta utilizzando due query su lo stesso ResultSet, nel ciclo for. Non funzionerà. Il ResultSet verrà chiuso se si esegue nuovamente lo stesso oggetto Statement con query diverse. Utilizzare diversi oggetti Statement oppure utilizzare un approccio diverso e rilasciare l'idea di ciclo for.

Problemi correlati