我有一个简单的数据库事务,如下面的代码。第一个查询应该可以正常工作,而第二个应该抛出异常,因此事务不应该通过!
问题是,运行此代码后,第一个查询似乎在我的表中插入了一行,就好像它不是事务性的一样。该代码确实会引发异常并被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();
}