multithreading - 多线程JDBC

标签 multithreading jdbc

从架构上讲,使用多线程处理 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/

相关文章:

java - 我在使用 sleep 时遇到问题?

c++ - 在condition_variable::wait()调用过程中中断程序(SIGINT),随后对exit()的调用导致程序卡住

c# - 线程实践。建模应用

java - SQL - PreparedStatement - 效率 - JDBC

java - sql异常错误

oracle - Tomcat GlobalNamingResources ResourceLink Oracle 获取数据源

C - 从带线程的文件中读取

node.js - 为什么 Node.js libuv 线程池执行不是并发的?

java - 带有实例名称的 DB2 JDBC 连接 url

java - SQL 异常 : the index is out of range