“java.sql.SQLException:ResultSet 关闭后不允许操作”的结果集重用解决方案
遇到“java.sql.SQLException: ResultSet 关闭后不允许操作”的解决方案
SQLException: ResultSet 关闭后不允许操作”错误,这表明同一语句对象同时使用多个结果集。这违反了 Statement 类的默认期望,即一次只允许打开一个 ResultSet。要在提供的代码中解决此问题,应采取以下步骤:在提取必要的数据后必须关闭 ResultSet 对象 rs 以避免与其他冲突ResultSets。
一个新的应创建PreparedStatement 对象来执行更新查询。这可确保原始 ResultSet 对象不受影响。
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:结果集关闭后不允许操作”?的详细内容。更多信息请关注PHP中文网其他相关文章!