>데이터 베이스 >MySQL 튜토리얼 >'java.sql.SQLException: ResultSet이 닫힌 후 작업이 허용되지 않습니다'를 해결하는 방법은 무엇입니까?

'java.sql.SQLException: ResultSet이 닫힌 후 작업이 허용되지 않습니다'를 해결하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-03 14:21:13269검색

How to Solve

"java.sql.SQLException: ResultSet이 닫힌 후 작업이 허용되지 않음"에 대한 ResultSet 재사용 솔루션

"java.sql.SQL. SQLException: ResultSet이 닫힌 후 작업이 허용되지 않습니다." 오류는 동일한 문 개체에서 여러 결과 집합이 동시에 사용되고 있음을 나타냅니다. 이는 한 번에 하나의 ResultSet만 열 수 있도록 허용하는Statement 클래스의 기본 기대치를 위반합니다.

제공된 코드에서 이 문제를 해결하려면 다음 단계를 수행해야 합니다.

getStuff() 메소드에서:

  • 다른 객체와의 충돌을 피하기 위해 필요한 데이터를 추출한 후 ResultSet 객체 rs를 닫아야 합니다. ResultSets.

호출 코드에서:

  • 문 개체와의 연결을 해제하려면 ResultSet 개체 rs도 닫혀야 합니다.
  • 새로운 업데이트 쿼리를 실행하려면 ReadyStatement 개체를 생성해야 합니다. 이렇게 하면 원래 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: ResultSet이 닫힌 후 작업이 허용되지 않습니다'를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.