Java 为什么setAutoCommit(false)在JDBC中不起作用?

Java 为什么setAutoCommit(false)在JDBC中不起作用?,java,mysql,jdbc,Java,Mysql,Jdbc,我试图在JDBC中为我正在开发的应用程序执行事务,但是Connection\setAutoCommit(false)似乎不起作用。代码如下: String insertclient=“插入客户值(?,,,,,,,?)”; 字符串vendiAuto=“{调用vendiAuto(?,,,?)}”; 尝试 { connection.setAutoCommit(false); PreparedStatement语句1=连接.prepareStatement(插入客户端); CallableStateme

我试图在JDBC中为我正在开发的应用程序执行事务,但是
Connection\setAutoCommit(false)
似乎不起作用。代码如下:

String insertclient=“插入客户值(?,,,,,,,?)”;
字符串vendiAuto=“{调用vendiAuto(?,,,?)}”;
尝试
{
connection.setAutoCommit(false);
PreparedStatement语句1=连接.prepareStatement(插入客户端);
CallableStatement语句2=connection.prepareCall(vendiAuto);
语句1.设置字符串(1,CF);
声明1.固定管柱(2,nome);
语句1.集合字符串(3,cognome);
声明1.setDate(4,新日期(新的GregorianCalendar(anno,mese,giorno).getTimeInMillis());
声明1.设置管柱(5,罗戈);
声明1.设置管柱(6,sesso);
声明2.设置字符串(1,密码);
声明2.设置管柱(2,卖方);
语句2.设置字符串(3,CF);
语句2.setBigDecimal(4,Prezzovedita);
语句1.execute();
语句2.execute();
commit();
}
捕获(SQLE异常)
{
connection.rollback();
投掷e;
}
最后
{
connection.setAutoCommit(true);
}
如果
statement2.execute()
也许我做错了什么。
我不知道如何解决。你能帮我吗?

所使用的DBMS是MySQL 8.0.18,表引擎是InnoDB。

我发现
连接。setAutoCommit(false)
与我的存储过程冲突:在该过程中,已经有一个事务(用
启动事务定义)并且以某种方式与语句冲突。

我解决了从存储过程中删除事务的问题。

当第二条语句失败时,您是否验证了您的代码确实进入了
catch
块?这是一个
CallableStatement
,有时存储过程会抛出一个不会立即触发JDBC异常的错误。您确定您的表是InnoDB而不是MyISAM吗?在任何情况下,请提供包含相关DDL的。@GordThompson它进入
catch
块;我已经和你核实过了debug@MarkRotteveel