java - 使用相同的语句对象在多个线程中执行多个查询?

标签 java sql database multithreading jdbc

重用 java.sql.Statement 对象在多个线程中同时执行多个查询是个好主意吗?

我在某处读到建议重用相同的语句对象,但它是顺序执行的。

Statement statement = con.createStatement();

现在,如果我使用这个单个语句实例来同时在多个线程中运行executeUpdate()以执行多个查询?

请注意,它不是PreparedStatement,并且我没有得到任何ResultSet。

我认为答案取决于两种情况:

  1. 如果查询是互斥的,那么应该没问题。
  2. 如果查询处理的是同一组数据,则可能会出现问题。

我的理解正确吗?

谢谢。

最佳答案

不,这绝对不是一个好主意。其一,ResultSetsStatement 相关联。当另一个线程突然进行新查询时,您不希望迭代 ResultSet(ResultSet 将被关闭,至少如果驱动程序表现良好的话) )。

也没有任何迹象表明语句是线程安全的。如果没有明确指出,则它不是线程安全的(至少在大多数情况下)。

关于java - 使用相同的语句对象在多个线程中执行多个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25177034/

相关文章:

sql - 如何执行左联接并排除与 LINQ 中的子查询匹配的结果?

mysql - 用于跟踪实验数据的数据库设计

java - 将属性注入(inject)到bean中

java - 如何修复服务器的输出,使其正确显示来自客户端的消息?

java - 使用 CXF 调用 Microsoft CRM 2011 本地 Web 服务

php - 谷歌地图 API 和 XML

Java JDBC 执行批处理

java - 同步块(synchronized block)是否会阻止其他线程访问对象?

sql - 选择具有 MAX(Date) 的记录但没有获得不同的返回

mysql - #1005 - 无法创建表 `musicplayer` .`Albums`(错误号 : 150 "Foreign key constraint is incorrectly formed")