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