錯(cuò)誤的代碼如下:
stmt=conn.createStatement();
rs=stmt.executeQuery(
"select * from t1"
);
rst=stmt.executeQuery(
"select * from t2"
);
rs.last();
//由于執(zhí)行了rst=stmt.executeQuery(sql_a);rs就會(huì)被關(guān)閉掉!所以程序執(zhí)行到此會(huì)提示ResultSet已經(jīng)關(guān)閉.錯(cuò)誤信息為:java.sql.SQLException: Operation not allowed after ResultSet closed
rst.last();
正確的代碼:
stmt=conn.createStatement();
rs=stmt.executeQuery(
"select * from t1"
);
rs.last();
//對(duì)rs的操作應(yīng)馬上操作,操作完后再從數(shù)據(jù)庫得到rst,再對(duì)rst操作
rst=stmt.executeQuery(
"select * from t2"
);
rst.last();
一個(gè)stmt最好對(duì)應(yīng)一個(gè)rs, 如果用一個(gè)時(shí)間內(nèi)用一個(gè)stmt打開兩個(gè)rs同時(shí)操作,會(huì)出現(xiàn)這種情況.編寫這樣的代碼的操作原則是:
所以解決此類問題:
1.就多創(chuàng)建幾個(gè)stmt,一個(gè)stmt對(duì)應(yīng)一個(gè)rs;
2.若用一個(gè)stmt對(duì)應(yīng)多個(gè)rs的話,那只能得到一個(gè)rs后就操作,處理完第一個(gè)rs后再處理其他的,如上"正確代碼".
多個(gè)stmt對(duì)應(yīng)各自的rs.
stmt=conn.createStatement();
stmt2=conn.createStatement();
rs=stmt.executeQuery(
"select * from t1"
);
rst=stmt2.executeQuery(
"select * from t2"
);
rs.last();
rst.last();
原文URL :
http://www.cnblogs.com/haore147/p/3617767.html