gpt4 book ai didi

multithreading - 多线程JDBC

转载 作者:行者123 更新时间:2023-12-04 19:23:56 27 4
gpt4 key购买 nike

从架构上讲,使用多线程处理 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),它确实是可池化的连接工厂。在每种方法中,您首先获得连接,完成所有工作并关闭连接。您应该尽快将连接返回到池。连接返回后,它可能不会物理关闭,而是重新初始化(所有事件事务关闭,所有 session 变量销毁等)

关于multithreading - 多线程JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1182163/

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