为什么MySQL JDBC不使用“启动事务”查询来启动事务?

问题描述 投票:1回答:2

我有一个Java应用程序,它使用JTA(Apache Geronimo)来管理事务。正在使用的数据库是MySQL。 App有很多开始和提交方法。但是看看MySQL通用日志,我找不到一个“启动事务”查询/命令。日志充满了SET autocommit=1SET autocommit=0commitrollback。因此,查看日志我无法确定交易开始的时间点。我不是一个Java人,我也找不到任何帮助资源。

java mysql jdbc jta jconnect
2个回答
3
投票

在MySql InnoDB中使用了启动事务和提交语句。但在MySQL MyISAM中,这些命令无效,因此您需要使用set autocommit = 0而不是Start Transaction和set autocommit = 1来代替commit; InnoDB允许这两种方式,但MyISAM只允许设置自动提交。另请注意,这些命令执行的工作有些类似,但它们并不完全相同。并且不建议在InnoDB中使用set autocommit。有关更多信息,请参阅StackOverflow中的this question


1
投票

MySQL的JDBC驱动程序实现了Java JDBC API。 java.sql.Connection interface没有开始交易的方法。

执行SQL查询时,事务会隐式开始。

如果驱动程序处于自动提交模式,则在SQL查询完成后将自动提交事务。

如果驱动程序未处于自动提交模式,则查询启动的事务将保持活动状态,直到您调用Connection.commit()Connection.rollback()

另见How to start a transaction in JDBC?

© www.soinside.com 2019 - 2024. All rights reserved.