我在JDBC中使用JDBC。我有一个非常复杂的插入和更新系列,我在一次交易中做了。这似乎在很大程度上起作用,但是大约1%的时间我发现我的一个表中的数据处于不一致状态。
如果发生错误,我会回滚事务,但我不确定如何开始调试。我的设置通常如下:
try {
conn.setAutoCommit(false);
PreparedStatement stmt1 = conn.prepareStatement("insert into table1");
stmt1.executeUpdate();
stmt1.close();
PreparedStatement stmt2 = conn.prepareStatement("update table2");
stmt2.executeUpdate();
stmt2.close();
... more statements ...
conn.commit();
}
catch (Exception ex) {
conn.rollback();
}
我正在使用2010版的mysql。我可能会尝试更新它,但我感觉我的应用程序代码中的更多内容会导致不一致。
我是否有任何调试工具可以帮助您在数据库级别提供帮助?还有其他指针吗?我使用JDBC和所有默认设置,我想知道在这种情况下我是否需要使用更严格的事务级别?
由于
-----注意----- 我所有的桌子都是InnoDb。
答案 0 :(得分:0)
答案 1 :(得分:0)
也许您在语句中使用DDL(创建表,alter table等)?
我不确定MySQL,但它可能无法回滚DDL语句。
例如:
见这里:http://dev.mysql.com/doc/refman/5.0/en/cannot-roll-back.html