从架构上来说,处理 JDBC 多线程的最佳方法是什么?我有许多线程同时访问数据库。通过单个连接和语句,我收到以下错误消息:
org.postgresql.util.PSQLException:此结果集已关闭。
我应该使用多个连接、多个语句还是有更好的方法?我的初步想法是每个线程使用一个语句,这将保证每个语句有一个结果集。
每个任务应该使用一个连接。如果您使用连接池,则无法使用由其他连接准备的准备好的语句。连接返回池后,连接创建的所有对象(ResultSet、PreparedStatements)均无效。
所以,是一样的
public void getSomeData() {
Connection conn = datasource.getConnection();
PreparedStatement st;
try {
st = conn.prepareStatement(...);
st.execute();
} finally {
close(st);
close(conn);
}
}
因此,在这种情况下,所有 DAO 对象都采用的不是 Connection,而是 DataSource 对象 (java.sql.DataSource),它确实是可池连接工厂。在每种方法中,您首先要建立连接,完成所有工作并关闭连接。您应该尽快将连接返回到池中。连接返回后,它可能不会物理关闭,而是重新初始化(所有活动事务关闭,所有会话变量销毁等)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)