我有一个简单的数据库事务,如下面的代码。第一个查询应该正常工作,而第二个查询应该抛出异常,因此事务不应该完成!
问题是,运行此代码后,第一个查询似乎在我的表中插入了一行,就好像它不是事务性的一样。该代码确实会引发异常,并执行 myCon.rollback();
但新行仍然会插入到表中。
我不确定我到底错过了什么,任何提示将不胜感激。
-- 编辑:问题是我的表使用默认的 MyISAM 引擎。我改成InnoDB,问题就解决了。
Connection myCon = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
myCon = DriverManager.getConnection (dbUrl, dbUser, dbPass);
myCon.setAutoCommit(false); // the intention is to do a transaction
Statement stmt = myCon.createStatement();
String query = "INSERT INTO tbltest(f1) VALUES (1);";
stmt.executeUpdate(query);
query = "INSERT INTO"; // a malformed query
stmt.executeUpdate(query);
con.commit();
}
catch(Exception e)
{
System.err.println(e.toString());
myCon.rollback();
}
finally
{
myCon.close();
}
最佳答案
你的 MySQL 数据库必须设置为支持这样的事情。我相信这意味着每个表都有 InnoDB。您的情况是这样吗?如果没有,请创建 InnoDB 表并重试。
关于java - JDBC 事务不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575040/