Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC事务不工作_Java_Jdbc_Transactions - Fatal编程技术网

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()用于调试。