预编译SQL需用?占位符、按序用setXxx()赋值、调用executeUpdate()或executeQuery()执行;严禁字符串拼接;参数索引从1起,类型须匹配;增删改用executeUpdate()并检查返回值;查询用executeQuery()配合rs.next();资源按rs→pst→conn顺序关闭。

直接上手做,重点是写对三件事:SQL模板带?占位符、用setXxx()按顺序填值、调用executeUpdate()或executeQuery()执行。
写好预编译SQL模板
SQL语句里所有动态值都用?代替,不拼字符串。比如插入用户:
-
正确:
INSERT INTO users(name, age, email) VALUES(?, ?, ?) -
错误:
"INSERT INTO users(name, age, email) VALUES('" + name + "', " + age + ", '" + email + "')"(易注入、类型错、引号乱)
WHERE条件、UPDATE的SET部分、ORDER BY的参数——只要值不确定,就一律用?。
按位置和类型填参数
索引从1开始,严格对应?出现的顺序;类型必须匹配:
-
pst.setString(1, "张三")→ 第一个?填字符串 -
pst.setInt(2, 28)→ 第二个?填整数 -
pst.setDate(3, new java.sql.Date(new java.util.Date().getTime()))→ 时间要转java.sql.Date - 不确定类型时可用
pst.setObject(4, value)兜底(如Boolean、null)
执行并判断结果
增删改统一用executeUpdate(),它返回受影响行数:
- 返回值 > 0 → 操作成功(比如插入1行、删除2行)
- 返回值 == 0 → 条件没匹配到数据(如DELETE WHERE id=999不存在)
- 不要只靠try-catch判断成败,要检查返回值
查询用executeQuery(),返回ResultSet,记得用rs.next()移动光标再取值。
别漏资源释放
Connection、PreparedStatement、ResultSet要关,顺序反过来:先rs,再pst,最后conn。用工具类(如JDBCUtils.release())封装更稳妥,避免忘记或异常中断导致连接泄漏。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











