multithreading - 跨线程共享的连接的JDBC自动提交

标签 multithreading jdbc autocommit

我有一个servlet,在其中获得一个Connection对象,然后将其交给两个工作线程进行各种 Activity 。我现在需要在一个线程上添加一个事务。

如果我这样开始交易:
connection.setAutoCommit(false);

这会影响两个线程吗?我想会的。

我是否必须获得每个线程的单独连接?

谢谢

最佳答案

我认为您正在做的事情是非常不好的做法。您不能在线程之间共享JDBC连接。

如果您在应用程序服务器(例如TOMCAT/JBoss/WebSphere/WebLogic)下运行,请使用适当的数据源来获取所需的连接。

查看您的Application Server文档,以获取有关如何执行此操作的信息。

您的servlet中将包含以下内容:

public void doGet(HttpServletRequest req, HttpServletResponse resp)
{
    Connection c = null;
    try {
        c = ...; /* preferred way of getting a connection in your AppServer
        // do what you need with your JDBC connection
    } catch (Exception e) {
        // handle errors
    } finally {
        c.close(); /* you will need another TRY/CATCH here */
    }
}

同样,您的工作线程将具有以下内容:
public void run()
{
    Connection c = null;
    try {
        c = ...; /* preferred way of getting a connection in your AppServer
        // do what you need with your JDBC connection
    } catch (Exception e) {
        // handle errors
    } finally {
        c.close(); /* you will need another TRY/CATCH here */
    }
}

最终,您可以将auto commit设置为在单独的连接对象上所需的任何值。

关于multithreading - 跨线程共享的连接的JDBC自动提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5110515/

相关文章:

java - 我可以对 subscribeOn 方法和异步任务使用相同的执行器吗

java - 默认值取决于列类型 mysql

java - 仅允许通过 sql server 、 oracle 和 postgres 中的 jdbc 对表进行更新

python - 为什么 SQLite3 不需要调用 commit() 来保存数据?

java - 主线程名称

java - put() 之后哈希表仍为空

python - 覆盖python threading.Thread.run()

java - 我可以多次更改 JDBC 连接的 AutoCommit 属性吗

Mysql 提交有时需要几分钟才能完成

mysql - 玩1.2.4自动提交