Java的JDBC使用批处理executeBatch()之后commit(),数据库没有变化。
代码
public static boolean newProblem_state(List<User_t> auditorlist, Problems_t problems)throws ClassNotFoundException, SQLException {
KrakenRecord.debug("正在建立关联"+auditorlist.size());
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
conn.setAutoCommit(false); // 设置手动提交
String sql = "insert into problemstate_ta (problemstate_problem_id,problemstate_auditor_id,problemstate_state) values("
+ problems.getProblems_id() + ",?,0)";
PreparedStatement ps = conn.prepareStatement(sql);
for (User_t user_t : auditorlist) {
ps.setInt(1, user_t.getUser_id());
ps.addBatch();// 添加到批次
}
int[] i = ps.executeBatch();// 提交批处理
conn.commit();// 执行
for (int j : i) {
System.out.println(j);
}
// 关闭资源
ps.close();
conn.close();
return true;
}
以上代码运行后,显示:
正在建立关联4
1
1
1
1
auditorlist的size是4正确,打印的四个1应该是executeBatch()正确执行了,但是数据库没有变化,求解
补充:昨晚发现是插入的数据库没反应,也就是problemstate_ta 这个表,无法插入数据,命令没有写错,在Navicat中窗口模式手动插入数据,数据的自动增长id显示+1,插入数据也没有报错,但是刷新表,数据没了,求解