2009-07-25 7 views
5

구조적으로 다중 스레드로 JDBC를 처리하는 가장 좋은 방법은 무엇입니까? 데이터베이스에 동시에 액세스하는 스레드가 많습니다. 단일 연결 및 문을 사용하여 다음 오류 메시지가 나타납니다.다중 스레드 JDBC

org.postgresql.util.PSQLException :이 ResultSet이 닫혀 있습니다.

여러 개의 연결을 사용해야합니까, 여러 개의 문을 사용하는 것이 좋습니까? 나의 예비적인 생각은 쓰레드 당 하나의 진술을 사용하여 진술마다 하나의 결과 세트를 보장하는 것이었다.

답변

4

작업 당 하나의 연결을 사용해야합니다. 연결 풀링을 사용하면 다른 연결에 의해 준비된 준비된 명령문을 사용할 수 없습니다. 연결에 의해 생성 된 모든 객체 (ResultSet, PreparedStatements)는 연결이 풀로 반환 된 후 사용할 수 없습니다.

그래서, 그것은 모든 DAO 객체가 연결되지 가지고이 경우

public void getSomeData() { 
    Connection conn = datasource.getConnection(); 
    PreparedStatement st; 
    try { 
    st = conn.prepareStatement(...); 
    st.execute(); 
    } finally { 
    close(st); 
    close(conn); 
    } 
} 

그래서 모두, 그러나 실제로 풀링 연결 공장 데이터 소스 오브젝트 (java.sql.DataSource). 그리고 각 방법에서 먼저 연결이 이루어지며 모든 작업을하고 연결을 끊습니다. 가능한 한 빨리 풀에 연결해야합니다. 연결이 반환 된 후 물리적으로 닫히지는 않지만 다시 초기화됩니다 (모든 활성 트랜잭션이 닫히고 모든 세션 변수가 손상됨)

1

예, 연결 풀과 함께 여러 연결을 사용하십시오. 필요한만큼 길게 연결을 연 다음, 작업이 완료 되 자마자 닫으십시오. 연결 풀이 효율성을 위해 "물리적"연결 관리를 처리하도록합니다.