문 연결을 재사용하기 전에 결과 집합 닫기
Java 데이터베이스 프로그래밍에서는 닫은 후 준비된 문을 사용할 때 발생하는 예외가 가끔 발생합니다. 결과세트. "ResultSet이 닫힌 후 작업이 허용되지 않음"이라는 예외는 특히 동일한 연결 개체가 사용될 때 발생합니다.
주어진 코드 조각에서는 기존 ResultSet를 닫은 후 동일한 연결 개체를 사용하여 새로운 준비된 문이 생성됩니다. (rs 및 rs2). 이로 인해 예외가 발생합니다. 이 문제를 해결하고 명령문 연결을 재사용하려면 먼저 명령문과 관련된 모든 이전 ResultSet가 닫혀 있는지 확인하는 것이 가장 좋습니다.
권장되는 한 가지 접근 방식은 ResultSets를 자동으로 닫는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!