JDBC事务无法正常工作

时间:2012-11-26 23:37:04

标签: java jdbc transactions

我有一个简单的数据库事务,如下面的代码。第一个查询应该正常工作,而第二个查询应该抛出异常,因此事务不应该通过!<​​/ 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();
    }

2 个答案:

答案 0 :(得分:5)

您的MySQL数据库必须设置为支持这样的事情。我相信这对每张桌子都意味着InnoDB。那是你的情况吗?如果没有,请创建InnoDB表并重试。

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

答案 1 :(得分:5)

您使用的是什么MySql引擎? AFAIK,一些引擎(例如MyISAM)不支持事务。 InnoDB确实。