ResultSetは1つのみ保持が標準の動作です
JDBCのよくある間違い
よくある度:★☆☆☆☆
状況:検索時
・ ResultSetオブジェクトは1つのみ保持
1つのStatementオブジェクトが保持できるResultSetオブジェクトは1つのみである。
Statement stmt = con.createStatement();
ResultSet rs1 = stmt.executeQuery("SELECT ...... ");
ResultSet rs2 = stmt.executeQuery("SELECT ...... ");
while(rs1.next()){
}
while(rs2.next()){
}
とした場合、2回目のexecuteQuery実行時にrs1は自動的にclose()されます。
従って、「while(rs1.next()){」のタイミングで例外が発生します。
※ドライバによっては可能な複数ResultSetが保持できます。
以下の2通りの対処方法が考えられます。
===その1:rs1のデータを取り出した後で2回目の検索を行う。
Statement stmt = con.createStatement();
ResultSet rs1 = stmt.executeQuery("SELECT ...... ");
while(rs1.next()){
}
ResultSet rs2 = stmt.executeQuery("SELECT ...... ");
while(rs2.next()){
}
===その2:別のStatementオブジェクトを生成する。
Statement stmt1 = con.createStatement();
Statement stmt2 = con.createStatement();
ResultSet rs1 = stmt1.executeQuery("SELECT ...... ");
ResultSet rs2 = stmt2.executeQuery("SELECT ...... ");
while(rs1.next()){
}
while(rs2.next()){
}