작업이 허용되지 않음: Java의 ResultSet Closed Exception
특정 SQL 쿼리를 실행할 때 개발자는 "java.sql.SQLException: ResultSet이 닫힌 후에는 작업이 허용되지 않습니다." 예외가 발생했습니다. 이 오류는 일반적으로 동일한 명령문 개체에서 여러 ResultSet를 동시에 시도할 때 발생합니다.
이 문제를 보여주는 다음 코드 조각을 고려하세요.
// Problem code: using the same statement object to create multiple ResultSets try { // Execute the first query and obtain ResultSet rs ResultSet rs = statement.executeQuery("SELECT `name` FROM `user` WHERE `id` = " + userId + " LIMIT 1;"); // Execute the second query and obtain ResultSet rs2 ResultSet rs2 = statement.executeQuery("SELECT `id` FROM `profiles` WHERE `id` =" + profId + ";"); // Prepare a new statement and attempt to use rs2 PreparedStatement pst = (PreparedStatement)connection.prepareStatement("INSERT INTO `blah`............"); // Process data from rs2 and update the database using pst while(rs2.next()) { int id = rs2.getInt("id"); int stuff = getStuff(id); pst.setInt(1, stuff); pst.addBatch(); } pst.executeBatch(); } catch (Exception e) { e.printStackTrace(); }
이 코드에서 두 개의 ResultSet(rs 및 rs2)는 동일한 명령문 객체(명령문)에서 생성됩니다. 그러나 rs는 명시적으로 닫히지 않지만 두 번째 쿼리가 실행되어 rs2를 얻을 때 암시적으로 닫힙니다. rs2가 닫힌 ResultSet에서 작업을 시도하기 때문에 예외가 발생합니다.
해결 방법:
이 문제를 해결하려면 사용하기 전에 모든 ResultSet를 닫는 것이 중요합니다. 새로운 ResultSet을 얻기 위해 동일한 명령문 객체를 사용합니다. 이는 예외가 발생하더라도 ResultSet가 닫히도록 try-finally 블록을 사용하여 달성할 수 있습니다.
// Corrected code: closing the ResultSet objects try { // Execute the first query and obtain ResultSet rs ResultSet rs = statement.executeQuery("SELECT `name` FROM `user` WHERE `id` = " + userId + " LIMIT 1;"); // Use rs to retrieve data if(rs.next()) { String name = rs.getString("name"); } // Close rs rs.close(); // Execute the second query and obtain ResultSet rs2 ResultSet rs2 = statement.executeQuery("SELECT `id` FROM `profiles` WHERE `id` =" + profId + ";"); // Use rs2 to retrieve data while(rs2.next()) { int id = rs2.getInt("id"); int stuff = getStuff(id); pst.setInt(1, stuff); pst.addBatch(); } // Close rs2 rs2.close(); pst.executeBatch(); } catch (Exception e) { e.printStackTrace(); }
위 내용은 Java에서 'java.sql.SQLException: ResultSet이 닫힌 후 작업이 허용되지 않음' 예외를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!