2016-06-11 8 views
0

QueryRunner 클래스가있는 DbUtils 라이브러리를 사용하여 쿼리를 실행합니다. 내 DbUtils docs의 underestanding에서 나는 연결을 닫는 것에 대해 걱정할 필요가 없습니다. 그러나 어떤 이유로 자동 또는 수동으로 연결을 닫지 않습니다. 여기 내 코드는 다음과 같습니다.DbUtils 사용 QueryRunner가 데이터베이스 연결을 닫지 않음

public static DataSource createDataSource() { 
    BasicDataSource d = new BasicDataSource(); 
    d.setDriverClassName(Globals.getInstance().getKonfiguracija().dajPostavku("driver")); 
    d.setUsername(Globals.getInstance().getKonfiguracija().dajPostavku("dbUsername")); 
    d.setPassword(Globals.getInstance().getKonfiguracija().dajPostavku("dbPassword")); 
    d.setUrl(Globals.getInstance().getKonfiguracija().dajPostavku("serverDatabase")); 
    return d; 
} 

public static void insertSQL(String sql) 
{ 
    DataSource dataSource = createDataSource(); 
    QueryRunner qr = new QueryRunner(dataSource); 

    try { 
     int inserts = qr.update(sql); 
     qr.getDataSource().getConnection().close(); 

    } catch (SQLException ex) { 
     Logger.getLogger(DBController.class.getName()).log(Level.SEVERE, null, ex); 
    } 

} 

주기적으로 insertSQL 메서드를 호출하는 스레드가있어서 "너무 많은 연결"오류가 발생합니다. Im Tomcat과 데이터베이스의 최신 버전을 사용하여 MYSQL입니다.

답변

1

insertSQL() 메서드를 호출 할 때마다 DataSource이 새로 생성됩니다. 이는 아마도 예외의 원인 일 수 있습니다.

대신, 한 번 DataSource 작성해야하고 예를 들어, QueryRunner 생성자에 인스턴스를 전달 :

QueryRunner queryRunner = new QueryRunner(dataSource); 

DataSource를 사용하면 일반적으로 수동으로 연결을 종료 할 필요가 없습니다.

더 많은 예제는 https://commons.apache.org/proper/commons-dbutils/examples.html을 참조하십시오.

+0

도움이 될 수도 있습니다. 아플 시도해보십시오. – Selfcoded