Java 回滚()不';调用DML存储过程时是否在DB中还原数据?

Java 回滚()不';调用DML存储过程时是否在DB中还原数据?,java,mysql,jdbc,transactions,Java,Mysql,Jdbc,Transactions,我使用的是Java 8、MySQL 5.6、Tomcat 7(及其连接池)和MySQL J/Connector JDBC 5.1.35 我所做的是调用三到六个存储过程(大多数是纯DML,有些是SELECT语句)。我用prepareCall({调用存储过程的名称(?,,,,?)})设置它们。 我用executeQuery()执行其中两个,用executeUpdate()执行另一个 在调用commit()之前,将引发异常并调用rollback()。在这一点上,我本以为数据库表中的数据会被还原,但这并

我使用的是Java 8、MySQL 5.6、Tomcat 7(及其连接池)和MySQL J/Connector JDBC 5.1.35

我所做的是调用三到六个存储过程(大多数是纯DML,有些是SELECT语句)。我用
prepareCall({调用存储过程的名称(?,,,,?)})设置它们。

我用
executeQuery()
执行其中两个,用
executeUpdate()执行另一个

在调用
commit()
之前,将引发异常并调用
rollback()
。在这一点上,我本以为数据库表中的数据会被还原,但这并没有发生!请注意,回滚期间未引发任何异常

正在执行的代码路径:

final Context initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/eukm");
Connection conn = ds.getConnection();
conn.setAutoCommit(false);

CallableStatement cs = conn.prepareCall("{call Store(?)}");
cs.setInt(1, 34); 

ResultSet rs = cs.executeQuery();
rs.next();
int newId = rs.getInt(1);
rs.close();

cs.close();

cs = conn.prepareCall("{call Add(?, ?)}");
cs.setInt(1, 34);
cs.setInt(2, 1);
cs.executeUpdate();
cs.close();

conn.rollback();
conn.close();

一个可能的原因可能是存储的进程在其体内提交,而它们没有。至少,我没有看到任何
COMMIT代码中的s。不过,有些存储过程确实有两个单独的DML语句。这可能是个问题吗?打开数据库上的sql日志,看看发生了什么。可能是setAutocommit不起作用了,是他做的,并且设置了autocommit。然而,我也注意到我的很多表都在MyISAM引擎上(它不支持事务!)。所以这一定是回滚不起作用的原因。