我有一个简单的数据库事务,如下面的代码。第一个查询应该正常工作,而第二个查询应该抛出异常,因此事务不应该通过!</ p>
问题是,在运行此代码后,第一个查询似乎在我的表中插入了一行,就像它不是事务性的一样。该代码确实抛出异常并执行了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();
}
答案 0 :(得分:5)
您的MySQL数据库必须设置为支持这样的事情。我相信这对每张桌子都意味着InnoDB。那是你的情况吗?如果没有,请创建InnoDB表并重试。
答案 1 :(得分:5)
您使用的是什么MySql引擎? AFAIK,一些引擎(例如MyISAM)不支持事务。 InnoDB确实。