ステートメント接続を再利用する前に ResultSet を閉じる
Java データベース プログラミングでは、閉じた後に準備されたステートメントを使用すると例外が発生することがあります。結果セット。この例外「ResultSet を閉じた後は操作は許可されません」は、特に同じ接続オブジェクトが使用されている場合に発生します。
指定されたコード スニペットでは、既存の ResultSet を閉じた後、同じ接続オブジェクトを使用して新しい準備済みステートメントが作成されます。 (rs および rs2)。これにより例外が発生します。この問題を解決してステートメント接続を再利用するには、最初にステートメントに関連付けられた以前のすべての ResultSet が閉じられていることを確認することをお勧めします。
推奨されるアプローチの 1 つは、ResultSet を自動的に閉じる try-with-resources ブロックを使用することです。およびステートメント。以下に例を示します。
try ( Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery("SELECT `name` FROM `user` WHERE `id` = " + userId + " LIMIT 1;") ) { if (rs.next()) { // Process the results } try ( ResultSet rs2 = statement.executeQuery("SELECT `id` FROM `profiles` WHERE `id` =" + profId + ";") ) { String updateSql = "INSERT INTO `blah` ..."; PreparedStatement pst = (PreparedStatement) connection.prepareStatement(updateSql); while (rs2.next()) { // ... } pst.executeBatch(); } } catch (SQLException e) { e.printStackTrace(); }
この例では、新しいバッチを準備するためにステートメントを使用しようとする前に、rs と rs2 の両方がそれぞれの try ブロック内で閉じられます。これにより、準備されたステートメントを実行する前に、開いている ResultSet が存在しないことが保証されます。
データベースとの正しい対話には、アクティブな ResultSet オブジェクトを維持することが重要であることを覚えておいてください。例外を回避し、データの整合性を確保するために、適切なリソースの処理とクリーンアップを常に優先してください。
以上がJava でステートメント接続を再利用すると「ResultSet が閉じられた後は操作が許可されません」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。