我有一個簡單的數據庫事務,如下面的代碼。第一個查詢應該正常工作,而第二個查詢應該拋出異常,因此事務不應該經過!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