增删改与事务要点
- INSERT/UPDATE/DELETE 用 executeUpdate,返回受影响行数
- 预编译 + setXxx 写带参的增删改,安全又清晰
- setAutoCommit(false) 关自动提交,进入手动事务
- 多步都成功再 conn.commit(),任一步异常就 rollback
- finally 里恢复 setAutoCommit(true),免得影响下条
- 增删改忘 WHERE 会动全表,先 SELECT 确认再动手
增删改与事务示例
// 新增
String insertSql = "INSERT INTO product (name, price) VALUES (?, ?)";
PreparedStatement ps = conn.prepareStatement(insertSql);
ps.setString(1, "机械键盘");
ps.setDouble(2, 299.00);
int insertN = ps.executeUpdate();
// 事务
conn.setAutoCommit(false);
try {
stmt.executeUpdate("UPDATE account SET balance = balance - 100 WHERE id = 1");
stmt.executeUpdate("UPDATE account SET balance = balance + 100 WHERE id = 2");
conn.commit();
} catch (SQLException e) {
conn.rollback();
} finally {
conn.setAutoCommit(true);
}
避坑提醒:executeUpdate 返回 0 不一定是失败,可能只是 WHERE 没匹配到任何行;排查时先看条件是否写对。