我正在使用javax.sql.rowset.JdbcRowSet
和com.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)
任何人都知道如何解决它?
答案 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();
}
}