我有一个简单的数据库事务,如下面的代码。第一个查询应该正常工作,而第二个查询应该抛出异常,因此事务不应该经过!JDBC事务不起作用
问题是,运行此代码后,第一个查询似乎在我的表中插入了一行,就好像它不是事务性的。代码确实会抛出一个异常,并执行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();
}
你可以在你的代码后编辑错误信息吗?顺便说一下,用e.printStackTrace();'not'e.toString();'可以更好地进行调试。 – durron597