ResultSet の再利用 「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」に対する解決策
「java.sql. SQLException: ResultSet を閉じた後は操作は許可されません」エラーは、複数の結果セットが同じステートメントから同時に使用されていることを示唆しています。 物体。これは、一度に 1 つの ResultSet しかオープンできないという Statement クラスのデフォルトの期待に違反します。
提供されたコードでこの問題を解決するには、次の手順を実行する必要があります:
getStuff() メソッド内:
呼び出しコード内:
これらの修正を加えて変更されたコードは次のようになります。
try { //Get some stuff String name = ""; String sql = "SELECT `name` FROM `user` WHERE `id` = " + userId + " LIMIT 1;"; ResultSet rs = statement.executeQuery(sql); if (rs.next()) { name = rs.getString("name"); } rs.close(); // Close the ResultSet 'rs' String sql2 = "SELECT `id` FROM `profiles` WHERE `id` =" + profId + ";"; ResultSet rs2 = statement.executeQuery(sql2); String updateSql = "INSERT INTO `blah`............"; PreparedStatement pst = (PreparedStatement) connection.prepareStatement(updateSql); while (rs2.next()) { int id = rs2.getInt("id"); int stuff = getStuff(id); pst.setInt(1, stuff); pst.addBatch(); } rs2.close(); // Close the ResultSet 'rs2' pst.executeBatch(); } catch (Exception e) { e.printStackTrace(); } private int getStuff(int id) { try { String sql = "SELECT ......;"; ResultSet rs = statement.executeQuery(sql); if (rs.next()) { int result = rs.getInt("something"); rs.close(); // Close the ResultSet 'rs' in 'getStuff' method return result; } return -1; }//code continues }
これらの変更を実装することにより、コードはすべての ResultSet が影響を受けないことを保証します。正しく閉じられ、「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」エラーが防止されます。
以上が「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。