gpt4 book ai didi

java - 使用单例连接的 JDBC 行集

转载 作者:行者123 更新时间:2023-11-29 06:45:59 24 4
gpt4 key购买 nike

我正在使用 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();
}

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

在 com.sun.rowset.JdbcRowSetImpl.execute(未知来源)

有人知道怎么解决吗?

最佳答案

这是关闭的 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();
}
}

关于java - 使用单例连接的 JDBC 行集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com