Java JDBC事务不工作
我有一个简单的数据库事务,如下面的代码。第一个查询应该可以正常工作,而第二个查询应该抛出异常,因此事务不应该通过 问题是,在运行这段代码之后,第一个查询似乎在我的表中插入了一行,好像它不是事务性的。代码确实会抛出异常并Java JDBC事务不工作,java,jdbc,transactions,Java,Jdbc,Transactions,我有一个简单的数据库事务,如下面的代码。第一个查询应该可以正常工作,而第二个查询应该抛出异常,因此事务不应该通过 问题是,在运行这段代码之后,第一个查询似乎在我的表中插入了一行,好像它不是事务性的。代码确实会抛出异常并myCon.rollback()已执行,但新行仍将插入表中 我不确定我到底错过了什么,任何提示都将不胜感激 --编辑:问题是我对我的表使用了默认的MyISAM引擎。我把它改成了InnoDB,问题就解决了 连接myCon=null; 尝试 { Class.forName(“com.m
myCon.rollback()代码>已执行,但新行仍将插入表中
我不确定我到底错过了什么,任何提示都将不胜感激
--编辑:问题是我对我的表使用了默认的MyISAM引擎。我把它改成了InnoDB,问题就解决了
连接myCon=null;
尝试
{
Class.forName(“com.mysql.jdbc.Driver”);
myCon=DriverManager.getConnection(dbUrl、dbUser、dbPass);
myCon.setAutoCommit(false);//目的是执行事务
语句stmt=myCon.createStatement();
String query=“插入tbltest(f1)值(1);”;
stmt.executeUpdate(查询);
query=“插入”;//格式错误的查询
stmt.executeUpdate(查询);
con.commit();
}
捕获(例外e)
{
System.err.println(例如toString());
myCon.rollback();
}
最后
{
myCon.close();
}
您的MySQL数据库必须设置为支持这样的功能。我相信这意味着每一张桌子都有InnoDB。你的情况就是这样吗?如果没有,请创建InnoDB表并重试
您使用的是什么MySql引擎?另外,一些引擎(例如MyISAM)不支持事务。InnoDB有。您可以在代码之后编辑错误消息吗?顺便说一句,你最好使用e.printStackTrace()代码>非e.toString()代码>用于调试。