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

时间:2018-07-16 12:10:29

标签: java mysql jdbc jta jconnect

我有一个Java应用程序,它使用JTA(Apache Geronimo)来管理事务。使用的数据库是MySQL。应用程序具有很多begin和commit方法。但是,查看MySQL常规日志,我找不到单个“启动事务”查询/命令。日志中充满了SET autocommit=1SET autocommit=0以及commitrollback。因此,通过查看日志,我无法确定事务在什么时候开始的。我不是Java专家,在此上也找不到任何帮助资源。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

MySQL的JDBC驱动程序实现Java JDBC API。 java.sql.Connection interface没有启动事务的方法。

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

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

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

另请参阅How to start a transaction in JDBC?