質問:非マルチスレッドで同じ接続を使用して、同時に動作する複数のステートメントとレコードセットを使用できますか?
私は興味のあるこの質問を見つけただけですが、答えは一貫していません。
接続ごとのJDBCステートメント/PreparedStatement
答えは、私が知っているレコードセットとステートメントの関係を説明しています。
そのため、ステートメントに複数のレコードセットを含めることはできません
答えは、接続用に複数のレコードセットを持つことができるということです。しかし、他の情報源については言及されていません。
最初のレコードセットをループしてから、同じ接続(最初のレコードセットの生成に使用)を使用して別のレコードセットを開くことが可能かどうかを尋ねています。これを繰り返しループで使用します。そして、この動作を定義するドキュメントはどこにありますか?
私が興味を持っている状況はこのようなもので、ステートメントは同時にタスクを実行します
Connection con = Factory.getDBConn (user, pss, endpoint, etc);
Statement stmt = con.createStatement ();
ResultSet rs = stmt.executeQuery ("SELECT TEXT FROM dba");
while (rs.next ()) {
rs.getInt (....
rs.getInt (....
rs.getInt (....
rs.getInt (....
Statement stmt2 con.createStatement = ();
ResultSet rs2 = stmt2.executeQuery ("iSelect ......");
while (rs2.next ()) {
....
rs2.close ();
stm2.close ();
Statement stmt3 con.createStatement = ();
ResultSet rs3 = stmt3.executeQuery ("Insert Into table xxx ......");
....
rs3.close ();
stm3.close ();
}
もう少し明確にするために:stmt3でupdateを実行すると、次のようなエラーが発生する可能性があります。
java.sql.SQLException:現在の接続に開いている結果セットがあります。これはクエリを実行する前に閉じる必要があります。
したがって、同じ接続でSQLを混在させることはできません。