gpt4 book ai didi

java - JDBC 事务不工作

转载 作者:行者123 更新时间:2023-12-02 15:48:53 26 4
gpt4 key购买 nike

我有一个简单的数据库事务,如下面的代码。第一个查询应该正常工作,而第二个查询应该抛出异常,因此事务不应该完成!

问题是,运行此代码后,第一个查询似乎在我的表中插入了一行,就好像它不是事务性的一样。该代码确实会引发异常,并执行 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 表并重试。

http://dev.mysql.com/doc/refman/5.0/en/commit.html

关于java - JDBC 事务不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com