jdbc必须通过亲手编码调试掌握,先建库建表、引入驱动、写单main实现基础crud并验证;再用preparedstatement防sql注入;最后封装jdbcutil简化连接与资源关闭。

直接上手练,不绕弯子。JDBC不是靠看懂的,是靠写熟的——每一步都得亲手敲、调试、出错、改错,才能真正掌握。
从建库到连通:先跑通最简流程
别一上来就封装工具类或搞连接池。第一步,只做四件事:
- 在 MySQL 中建库建表(比如 t_user,含 id、name、age 字段)
- Maven 引入 mysql-connector-java 8.0.33+(适配 JDK 17+)
- 写一个单 Main 方法:加载驱动 → 获取 Connection → 创建 Statement → 执行一条 SELECT COUNT(*) → 打印结果 → 关闭资源
- 确保控制台输出数字,且无 SQLException 报错
这一步卡住?重点查 URL 格式(jdbc:mysql://localhost:3306/dbname?useSSL=false&serverTimezone=GMT%2B8)、用户名密码、MySQL 服务是否启动。
增删改查闭环练习:每个操作单独验证
把 CRUD 拆开练,每次只改一小段,避免堆砌代码导致问题叠加:
- 查(DQL):用 executeQuery() + ResultSet.next() 遍历,手动取字段(rs.getString("name")),不要跳过 null 判断
- 增(INSERT):用 executeUpdate(),检查返回值是否为 1;插入后立即查一遍确认写入成功
- 改/删(UPDATE/DELETE):同样看影响行数;删之前先 select 确认 ID 存在,避免静默失败
关键细节:所有 Connection、Statement、ResultSet 必须在 finally 或 try-with-resources 中关闭,否则连接泄漏肉眼难见,但跑几次就报“too many connections”。
升级防御:用 PreparedStatement 替代 Statement
原生拼 SQL 是教学起点,但必须立刻切换到 PreparedStatement——这不是“高级技巧”,而是安全底线:
- 把登录校验写成 "SELECT * FROM t_user WHERE account = ? AND password = ?"
- 用 ps.setString(1, inputAccount)、ps.setString(2, inputPwd) 赋值
- 故意输带单引号的账号(如 ' OR '1'='1),观察是否仍查不到数据——这才是防注入生效的实证
顺便体会预编译优势:同一 SQL 多次执行时,数据库只需解析一次执行计划。
稳住底盘:加一层简单工具类封装
练熟单步后,自己写一个 JDBCUtil 工具类,只做三件事:
- 静态块里加载驱动(MySQL 8+ 可省略,但写上更清晰)
- 提供 getConnection() 方法,复用配置(URL、user、pwd)
- 提供 close(AutoCloseable...) 方法,统一关闭传入的任意资源
不用追求通用 DAO 或反射自动映射。先让自己的 CRUD 代码从 20 行缩到 8 行,且不再重复写 close,就算达成目标。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











