JDBC RowSet使用单例连接

时间:2013-09-06 14:01:43

标签: java mysql jdbc rowset

我正在使用javax.sql.rowset.JdbcRowSetcom.sun.rowset.JdbcRowSetImpl来操纵数据。一切正常,但我收到一个警告,我可能会泄漏资源。

另外,我在JdbcRowSet构造函数中使用单例连接,它始终是打开的,但是当我使用JdbcRowSet close()时,我无法在下一个方法中使用它。

这是代码。

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();
}

当它在myrs中执行function2()时,我收到错误:

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

任何人都知道如何解决它?

1 个答案:

答案 0 :(得分:2)

这是close

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

由于JdbcRowSetImpl.close()将关闭连接,因此适合当前体系结构的最佳方法可能是创建一个JdbcRowSet成员或实例单例,当您希望对连接进行分类时,该单例将关闭。你的function1和function2看起来像这样

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();
    }
}