在JDBC中,我们可以说,只要我们获得连接,交易就会开始,并在关闭连接时完成 。这是正确的吗?如果可以,我们可以说在不同的请求共享 相同的连接,即使所有未提交的交易将全部可见 所有请求?JDBC事务开始
JDBC事务开始
回答
@BalusC - 这是不正确的。默认情况下,autocommit设置为true,这意味着事务在任何JDBC操作之前开始,并在该单一操作后结束RIGHT,而不是在连接关闭时结束。
但你说得对,共享连接确实不好,如果你想多线程你的数据库,最好是以你有线程池的方式处理它(在java.util.concurrent中查找ThreadPoolExecutor)和对于每个线程,您都会获得单独的连接。 ConnectionPool也是一个不错的选择,但我宁愿通过ThreadPool来限制它 - 这种方式永远不会有一个线程等待来自池的连接。
没错。这是默认行为。在完成所有查询后,检索连接并提交connection.commit()
后,您可以通过将自动提交设置为false
connection.setAutoCommit(false)
来接管此控件。
但是,在不同的请求(线程)之间共享连接本身就是一个糟糕的设计。你的应用程序是这种方式不是线程安全的。您不想在不同线程之间共享相同的连接。如果你只想要消除连接数据库的成本,那么你应该考虑使用连接池。
访问数据库时的第一条规则。 每一个非事务性操作中应:
1.open连接,如果有连接池,然后从池中获取 2.连接创建执行语句 3.如果在读取查询然后映射结果集。 4.关闭结果集。 5.关闭声明。 6.关闭连接。
,如果你想你的操作是在交易,那么你应该考虑这种方法:
操作1:1。 getSharedConnection 2.创建/执行语句 3.如果在读取查询然后映射结果集。 4.关闭ResultSet 5. close语句
操作2: 同操作1.
和该事务:
公共无效updateInTransaction(){ 连接康恩= pool.getConnection() ; //或者你可以创建一个新的连接 conn.setAutocommit(false); operation1(conn); operation2(conn); conn.close; }
这只是小应用程序的基础知识。 如果你正在开发更大的应用程序,你应该使用来自Springsoruce的相同框架,如JDBCTemplates。
- 1. JDBC开始事务失败休眠(破碎的管道)
- 2. JDBC事务
- 3. jdbc开始失败
- 4. 如何使用事务(开始事务,提交事务)?
- 5. JDBC确定活动事务
- 6. 当回滚JDBC事务
- 7. JDBC中的事务状态
- 8. 混合JTA和JDBC事务
- 9. JDBC事务不起作用
- 10. sqlite3/C事务开始结束 - 溢出?
- 11. 春天开始一个事务由新
- 12. 事务开始时的监听器
- 13. SQL开始事务没有提交
- 14. 从BroadcastReceiver开始从事服务活动
- 15. 开始事务时出现SqlServer.Management.SMO.Server错误
- 16. 回滚事务请求没有相应的开始事务
- 17. 在MS SQL中开始事务并提交事务
- 18. 开始新的事务是否强制当前事务提交?
- 19. TransactionSystemException:无法回滚Hibernate事务;事务未开始
- 20. 以JDBC开始的先决条件
- 21. 如何做包含JDBC和JMS事务的XA事务?
- 22. 当事务处于非事务中时回滚Spring JDBC操作
- 23. 在hibernate事务中创建一个简单的jdbc事务
- 24. 如何在XA事务中引入Spring JDBC事务?
- 25. Windows服务始终“开始”
- 26. Spring集成和JDBC在单个事务
- 27. 如何在JDBC中启动事务?
- 28. Sybase中的JDBC事务控制
- 29. Mule 3.3.0 Jdbc事务不需要提交
- 30. 通过jOOQ事务访问JDBC连接