2013-09-06 6 views
1

나는 데이터를 조작하기 위해 javax.sql.rowset.JdbcRowSetcom.sun.rowset.JdbcRowSetImpl을 사용하고 있습니다. 모든 것이 정상적으로 작동하지만 리소스 누출이 발생할 수 있다는 경고가 표시됩니다.싱글 톤 연결을 사용하는 JDBC 행 집합

또한 항상 열려있는 JdbcRowSet 생성자에서 싱글 톤 Connection을 사용하고 있지만 JdbcRowSet을 사용하면 close() 다음 메소드에서 사용할 수 없습니다.

다음은 코드입니다.

at com.sun.rowset.JdbcRowSetImpl.execute(Unknown Source)

누구나 그것을 해결하는 방법을 알고 :

public static Connection conn = DBConnection.getInstance() 
     .getConnection(); 



(not the exact work, only a sample code) 
private static void function1() { 

    try { 
     JdbcRowSet myrs = new JdbcRowSetImpl(conn); 
     myrs.setCommand("SELECT * FROM `table1`"); 
     myrs.execute(); 

     //result iteration 

     myrs.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 
private static void function2() { 
    same as function1 (for example, not really important here) 
} 

public static void start(){ 
    function1(); 
    function2(); 
} 

언제 내가 오류가 발생하는 function2()myrs을 실행 얻는다?

+0

function1을 두 번 실행하면 어떻게됩니까? –

+0

@FrankOlschewski function2를 실행 한 것과 같습니다. – Ivan

답변

2

여기에 연결, 인에 JdbcRowSet 구성원 또는 인스턴스 싱글을 만들 수 있습니다 현재의 아키텍처에 맞는 최선의 방법을 닫습니다)를 JdbcRowSetImpl.close (이후 가까운

public void close() throws SQLException { 
    if (rs != null) 
     rs.close(); 
    if (ps != null) 
     ps.close(); 
    if (conn != null) 
     conn.close(); 
} 

의 JdbcRowSetImpl 구현입니다 연결이 분류 될 것으로 예상되면 닫힙니다. 함수 1과 함수 2는 다음과 같습니다.

public static Connection conn = DBConnection.getInstance() 
    .getConnection(); 
//Implementation of DBRowSet left as an exercise for the ambitious. 
public static JdbcRowSet myrs = DBRowSet.getInstance(); 

private static void function1() { 
    try { 
     myrs.setCommand("SELECT * FROM `table1`"); 
     myrs.execute(); 
     //result iteration 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 
private static void function2() { 
    try { 
     myrs.setCommand("SELECT * FROM `table2`"); 
     myrs.execute(); 
     //result iteration 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 
+0

그것은 무엇입니까? 그것이라면 나는 위대하다, 나는 그것에 대해 걱정할 필요가 없다! 이클립스는 RowSet의 인스턴스를 생성 할 때 경고 메시지를 표시한다.'리소스 누출 : 'myrs'는 절대로 닫히지 않는다. 편집 : 그것이 atuoclosable 있다면, 연결 살아 나중에 남아있을 것인가? – Ivan

+0

가능한 답변으로 답변을 업데이트했습니다. Java 7을 사용하지 않기 때문에 Autocloseble 인 JdbcRowset은 귀하와 관련이 없습니다. –

+1

JdbcRowSet 클래스를 구현하고'close()'메소드를 오버라이드하면 어떻게됩니까? 그게 도움이 될까요? – Ivan