JDBC事务无法正常工作

Abb*_*bas 2 java transactions 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();
    }
Run Code Online (Sandbox Code Playgroud)

duf*_*ymo 5

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

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


mbe*_*low 5

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