我有一些Java代码使用JDBC连接到MySQL数据库,然后代码执行一些读取操作,然后进行单个更新,所有更新都使用相同的连接。如果有例外,则调用connection.rollback()
;如果没有例外,则调用connection.commit()
。在这个阶段,每次运行我的测试时都会新建连接(即它不是来自池)。我的代码只创建一个连接,并在整个测试中使用。mysql jdbc不成功回滚
正在使用的连接在创建连接实例后立即调用connection.setAutoCommit(false)
。
出于某种原因,当出现异常并调用connection.rollback()
时,事实证明我的更新已被提交而不是回滚。
通过调试,我已经证实了以下
调用
connection.setAutoCommit(false)
后,connection.getAutoCommit()
返回false
值,符合市场预期。此外,"Select @@session.autocommit"
返回的值为0
,表示自动落实已按预期关闭。紧接在致电
connection.rollback()
之前,根据预期,相同的检查显示自动提交已关闭。connection.commit()
绝对没有被调用,connection.rollback()
肯定被称为。
我也尝试过明确运行语句"rollback;"
但它不能解决我的问题。我也尝试在创建连接后明确运行语句"Set AUTOCOMMIT = 0;"
。
我所有的表都使用InnoDB的存储引擎。通过SQL Workbench,自动关闭,回滚和提交按预期工作。
我正在使用MySQL版本'5.0.91-community-nt'。 MySQL jdbc驱动程序版本是5.1.19。我使用Java 5
有没有人有任何建议,为什么我的更新是越来越致力于即使自动提交关闭时,提交不会被调用,并回滚显式调用?
干杯。
请张贴代码,你试过。 – sunleo
代码请!!!!! – Konza