练JDBC重在贯通“连接→执行→结果→释放”闭环,需理解每步设计原理、常见陷阱及防御方法,通过真实场景倒推五步流程、三练PreparedStatement、手动模拟资源泄漏、事务开关实验来夯实实践能力。

练JDBC不是背API,而是把“连接→执行→结果→释放”这个闭环跑通、跑稳、跑安全。重点不在写多少行代码,而在每一步背后为什么这么设计、容易踩什么坑、怎么提前防住。
从真实场景倒推五步流程
别一上来就照着教程敲“加载驱动→获取连接→创建Statement……”。先想一个具体要做的事,比如“给用户表插入一条带中文名的数据”,再反向拆解需要哪些环节:
- 数据库得连上——所以要URL、账号密码、驱动jar包;
- 插入语句里有姓名、邮箱、注册时间——参数不能拼字符串,得用
PreparedStatement; - 插入失败得知道是主键冲突还是字段超长——得捕获
SQLException并看getSQLState()或getErrorCode(); - 哪怕只插一条,Connection和PreparedStatement也必须关——否则连接数很快耗尽;
- 如果后续还要查刚插的记录,就得考虑事务:要么自动提交(默认),要么手动
commit()。
用 PreparedStatement 替代 Statement 练三次
很多初学者卡在SQL注入和乱码,根源常出在第一步就用了Statement。专门拿同一段逻辑练三遍:
- 第一次:用
Statement拼接SQL(如"INSERT INTO user VALUES ('"+name+"', '"+email+"')"),故意输单引号试试报错; - 第二次:改用
PreparedStatement,用setString(1, name)设参,观察错误消失、中文正常入库; - 第三次:在同一个
PreparedStatement对象上连续调用executeUpdate()插入5条不同数据——体会预编译带来的效率提升和语法校验前置的好处。
手动模拟资源泄漏,再亲手修复
光看“要关闭Connection”没用。自己故意注释掉conn.close(),跑10次插入,然后去MySQL执行SHOW PROCESSLIST,看空闲连接堆积;再打开连接池监控(比如Druid的/druid/index.html),对比有无关闭时的活跃连接数曲线。有了直观感受,再写try-with-resources才真正理解它不只是语法糖,而是对JDBC最硬核的兜底保障。
把事务控制当成开关来调
建两张关联表(比如订单表+订单明细表),写一段同时插入两表的代码:
- 先保持
autoCommit = true,删掉第二张表某字段,看第一条插入成功、第二条失败后,数据库里是否残留脏数据; - 再设
conn.setAutoCommit(false),手动commit()和rollback(),验证两条要么全进、要么全不进; - 最后加个
Savepoint,在中间步骤设置回滚点,体验部分回滚的粒度控制。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











