【发布时间】:2021-04-15 08:31:11
【问题描述】:
我的 MySQL 的存储引擎是 InnoDB。当我设置 MySQL 系统变量autocommit=0 时,执行 Java 代码后我看不到数据库中的任何更改:
String sql = "insert into user (userName, userAge, password) " +
"values (?, ?, ?);";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, "hh");
preparedStatement.setInt(2, 33);
preparedStatement.setString(3, "agadf");
int i = preparedStatement.executeUpdate();
conn.close();
或隐式使用commit:
conn.setAutoCommit(false);
String sql = "insert into user (userName, userAge, password) " +
"values (?, ?, ?);";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, "hh");
preparedStatement.setInt(2, 33);
preparedStatement.setString(3, "agadf");
int i = preparedStatement.executeUpdate();
conn.commit();
conn.setAutoCommit(true);
执行此操作后,执行“select * from user;”时看不到任何更改。但是当我在 MySQL shell 中输入commit 后,insert 操作就起作用了。
所以,我很想知道系统变量autocommit的真正作用。如果我设置为0,在MySQL shell中不执行commit就无法使用JDBC修改数据?
同时我想知道为什么setAutomatic(true)或conn.commit()在系统变量autocommit为0的情况下不能将更改提交到真实表?
【问题讨论】: