2012-06-12 22 views
5

जब मेरे resultset डेटा बड़ी है मैं com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][4.9.78] Invalid operation: result set is closed. 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(); 

उत्तर

10

पाश के लिए पहले

stmt = conn1.createStatement(); 

रखें।

7

से है Java docs:

एक ResultSet वस्तु स्वचालित रूप से वक्तव्य उद्देश्य यह है कि यह उत्पन्न होती है जब कि वक्तव्य वस्तु, बंद कर दिया फिर से मार डाला, या n पुनः प्राप्त करने के लिए किया जाता है है द्वारा बंद कर दिया गया है कई परिणामों के अनुक्रम से ext परिणाम।

इसलिए आपकी त्रुटि।

आपकी stmt स्टेटमेंट ऑब्जेक्ट को आपके for लूप में हर बार फिर से निष्पादित किया जा रहा है।

इसके अलावा, from here:

गैर आयोजित कर्सर के लिए, जब चालक 1 ResultSet के माध्यम से कदम खत्म, ड्राइवर के लिए प्रतिबद्ध है, तो autoCommit पर है प्रवाह होगा, और कहा कि सब कुछ बंद हो जाएगा। यदि आप चाहते हैं कि अन्य परिणामसेट खुला रहे, तो आप होल्ड कर्सर के साथ उपयोग करना चाह सकते हैं।


संपादित करें:

(ओ पी के लिए - कृपया एक टुकड़ा पोस्ट नहीं बदल रहा है के टुकड़े हर समय रखें।) जवाब अब भी वही है: आप पर दो प्रश्नों का उपयोग कर रहे आपके for लूप में, ResultSet समान है। वह काम नहीं करेगा। ResultSet बंद हो जाएगा यदि आप अलग-अलग प्रश्नों के साथ उसी Statement ऑब्जेक्ट को फिर से निष्पादित करते हैं। या तो विभिन्न Statement ऑब्जेक्ट्स का उपयोग करें, या एक अलग दृष्टिकोण का उपयोग करें और for लूप विचार ड्रॉप करें।

संबंधित मुद्दे