2012-06-12 46 views
5

Khi dữ liệu resultset của tôi là lớn tôi nhận được com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][4.9.78] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null ngoại lệ nhưng không phải khi tôi cố gắng có ít số lượng dữ liệu trong resultsetkhông hợp lệ hoạt động: tập kết quả được đóng

Dưới đây là đoạn mã của tôi

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

Trả lời

10

Giữ

stmt = conn1.createStatement(); 

trước khi vòng lặp for.

7

Từ các Java docs:

Một đối tượng ResultSet được đóng tự động bởi đối tượng Statement đã tạo đối tượng đó khi đối tượng Statement được đóng lại, được thực hiện lại hoặc được sử dụng để truy xuất ext kết quả từ một chuỗi nhiều kết quả.

Do đó, lỗi của bạn.

stmt Đối tượng tuyên bố của bạn đang được thực thi lại mọi lúc trong vòng for của bạn.

Ngoài ra, from here:

Đối với con trỏ không được tổ chức, khi tài xế kết thúc bước qua ResultSet 1st, người lái xe sẽ chảy cam kết nếu Autocommit được bật, và điều đó sẽ đóng tất cả mọi thứ khác. Nếu bạn muốn ResultSet khác vẫn mở, bạn có thể muốn sử dụng con trỏ giữ.


EDIT:

(để OP - vui lòng gửi một đoạn Đừng tiếp tục thay đổi đoạn tất cả các thời gian.) Câu trả lời vẫn là như nhau: bạn đang sử dụng hai truy vấn trên cùng một số ResultSet, trong vòng for của bạn. Điều đó sẽ không hoạt động. ResultSet sẽ bị đóng nếu bạn thực hiện lại cùng một đối tượng Statement với các truy vấn khác nhau. Sử dụng các đối tượng Statement khác nhau hoặc sử dụng cách tiếp cận khác và thả ý tưởng vòng lặp for này.

Các vấn đề liên quan