【发布时间】:2017-11-10 18:48:47
【问题描述】:
我有一个包含 id 列、bids 列和 cost 列的表。我在 jdbc 中使用事务。我将自动提交设置为 false,执行了一些查询来更新该表,然后调用回滚方法,该方法应该撤消在事务中所做的更改并将表恢复到之前的状态。但是,该表仍在更新中。
这是我的代码:
public class JdbcTransactions {
public static void main(String[] args) {
Connection myConn = null;
Statement myStmt = null;
try {
myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tutorialdatabase", "student", "student");
myConn.setAutoCommit(false);
myStmt = myConn.createStatement();
myStmt.executeUpdate("UPDATE items SET bids = 0 WHERE id <= 5");
myStmt.executeUpdate("UPDATE items SET cost = cost + 100 WHERE id <= 5");
myConn.rollback();
}catch(SQLException e) {
System.err.println("Something went wrong: ");
e.printStackTrace();
} finally {
try {
myStmt.close();
myConn.close();
}catch(SQLException e) {
}
}
}
}
我想更新 tutorialdatabase 中的 items 表,将出价设置为 0,并将前 5 行的成本增加 100(ID 为 1 - 5 的所有行)
【问题讨论】:
-
您确定在运行代码时没有遇到任何异常吗?
-
不,根本没有抛出 SQLException。 :(
-
还有其他例外情况。也许您需要捕获通用异常并查看发生了什么?
-
您的自动提交也可以在数据库会话级别启用
-
表的DDL是什么,它们是MyISAM表吗?