2010-12-03 2 views

답변

5

정상적인 연결 종료 상태에서 수행해야하는 작업에 대해서는 JDBC 사양이 매우 명확하지 않으므로 사용하는 풀에 관계없이 항상을 사용해야합니다. 장래에 다른 풀로 전환하려고 할 때 응용 프로그램에 어떤 일이 일어나는지 생각해보십시오.

BoneCP와 관련하여 답은 아니오입니다. 잊어 버린 경우 연결을 종료하도록 구성 할 수 있지만 답변을 닫지는 않습니다. 일부 JDBC 드라이버는 연결을 닫을 때 내부적으로 활성 상태 인 모든 문을 닫을 것이므로 성능상의 이유로 사용됩니다.

그러나 BoneCP는 캐싱이 설정된 명령문이 있으면 캐시 된 명령문을 모두 닫습니다.

EDIT : v0.8.0부터, 닫히지 않은 문장을 닫기위한 지원이 추가되었습니다. (원하는 경우 명령문이 열린 위치의 스택 추적을 인쇄합니다).

1

BoneCP (0.8.0 -RC3),

이 캐시되지 않은 문에 대한 몇 가지 구성으로 봉쇄

이 개 가능한 결과 만

에 상관없이 구성하는 방법 오프 비 닫으있다 캐시 된 명령문에 대해서도 명시 적으로 statement.close()를 호출합니다.

preparedStatement & callableStatement를 캐시하는 StatementCache 클래스가 있습니다. 기본값은 비활성화입니다. 활성화하려면> 0 매개 변수를 사용하여 BoneCPConfig.setStatementsCacheSize()를 호출해야합니다. 캐시를 활성화 한 후

1 캐시 된 경우 BoneCP.Statement.Close()는 기본 명령문 닫기를 무시합니다.

public void close() throws SQLException { 
     this.connectionHandle.untrackStatement(this); 
    this.logicallyClosed.set(true); 
    if (this.logStatementsEnabled){ 
     this.logParams.clear(); 
     this.batchSQL = new StringBuilder(); 
     } 

     if (this.cache == null || !this.inCache){ // no cache = throw it away right now 
      this.internalStatement.close(); 
    } 
} 

2 BoneCP.Connection.close() 는 단지

좋은 소식은 MySQL의 JDBC 드라이버, 커넥터/J입니다 ") (clearStatementCaches"기능을 통해 캐시를 지울 것인가는 모든을 닫습니다 함수 "closeAllOpenStatements()"를 통해 연결을 닫을 때 열린 문이 표시됩니다.

관련 문제