2012-06-06 3 views
1

결과 집합을 닫을 때 문이 어떻게됩니까?ResultSet을 닫을 때 Statement가 어떻게됩니까?

Statement stmt = null; 
    ResultSet rs = null; 

    try { 
     stmt = con.createStatement(); 
     rs = stmt.executeQuery(query.toString()); 
     ... 
    } 

    // lots of code 

    rs.close() 

참고 ResultSet 객체는 자동으로 문 객체가 재실행 닫힐 때 생성 또는 의 시퀀스에서 다음 결과를 검색하기 위해 사용되는 정책 객체가 닫혀 여러 결과.

하지만 ResultSet을 먼저 닫으면 어떻게됩니까?

무슨 일이 생기면 먼저해야 할 일이 무엇입니까?

답변

6

개체를 만드는 것과 반대로 개체를 닫아야합니다. 그래서 먼저 ResultSet, 그 다음 Statement 그리고 결국 Connection입니다.

Statement을 닫지 않으면 계속 열어두고 다른 검색어를 실행할 수 있습니다 (PreparedStatement 또는 CallableStatement 인 경우 검색어 매개 변수를 변경할 수 있음).

인용 한 내용은 JDBC 사양이며 JDBC 구현 업체의 구현은 JDBC 드라이버 공급자에게 달려 있습니다. 대개 신뢰할 수 없으며 수동으로 해당 개체를 닫아야합니다.

다른 점 - 나는 더 중요하다고 생각합니다 - 연결 풀 (JBoss에서와 같이)을 사용하는 경우 연결을 닫으면 풀로 다시 해제되고 기본 객체는 해제되지 않습니다. 그리고이 때문에, 당신이 만든 모든 객체를 항상 수동으로 해제하는 것이 좋습니다.

+0

+1 설명을 위해. 좋은 하나 –

+0

당신이 연결을 닫으면 resultset과 성명은 자동으로 닫힙니다 ... – Sajmon

+0

@ hawaii.five-0 그래, 그것은 연결 풀이 아니라 수영장에서 다시 연결을 풀어. – npe

1

Statement에 아무런 변화가 없습니다. 명세서를 계속 사용할 수 있지만 끝나면 반드시 닫아야합니다.

+0

답변보다는 댓글을 더 많이 생각하지 않습니까? –

2

실제로 Statement을 재사용 할 수 있습니다. 동일한 쿼리를 반복하는 경우 쿼리가 한 번 컴파일되므로 PreparedStatement을 사용해야합니다.

물론 작업이 끝나면 닫아야하지만, ResultSet을 닫아도 정당한 이유 때문에 Statement이 자동으로 닫히지 않습니다.

관련 문제