JDBC事务开始



在JDBC中,我们可以说事务在获得连接后立即开始并完成吗当我们关闭连接时。这是对的吗?如果是,我们可以说在不同的请求中共享相同的连接,甚至所有未提交的事务都将对所有人可见所有请求?

@BalusC-这真的不正确。默认情况下,autocommit设置为true,这意味着事务在任何JDBC操作之前开始,并在该单个操作之后立即完成,而不是在连接关闭时。

但共享连接确实不好,这是对的。如果你想对数据库进行多线程处理,最好用线程池的方式来处理它(在java.util.concurrent中查找ThreadPoolExecutor(,每个线程都有一个单独的连接。ConnectionPool也是一个很好的方法,但我宁愿通过ThreadPool来限制它——这样就不会有线程在等待来自池的连接。

没错。这是默认行为。您可以通过在检索连接后由connection.setAutoCommit(false)将自动提交设置为false,并在执行所有查询后由connection.commit()提交事务来接管此控制。

然而,在不同的请求(线程(之间共享连接本身就已经是一种糟糕的设计。这样,您的应用程序就不安全了。您不希望在不同的线程之间共享相同的连接。如果您想要的只是消除连接数据库的成本,那么您应该考虑使用连接池。

访问数据库时的第一条规则。每个非交易操作都应该:

1.打开连接,如果有连接池,则从池中获取连接2.创建execute语句3.如果是读取查询,则映射结果集。4.关闭结果集。5.结束陈述。6.关闭连接。

如果你想让你的操作在交易中,那么你应该考虑这种方法:

操作1:1.获取共享连接2.创建/执行语句3.如果是读取查询,则映射结果集。4.关闭结果SEt5.结账

操作2:与操作1相同。

交易:

public void updateInTransaction(({Connection conn=pool.getConnection((//或者你可以创建一个新的连接conn.setAutocommit(false(;operation1(conn(;操作2(conn(;conn.close;}

这只是小型应用程序的基础知识。若你们正在开发更大的应用程序,你们应该使用同样的框架,比如Springsoruce的JDBCTemplates。

最新更新