java jdbc硬核通关需将连接、执行、释放、防错、提效五动作练成肌肉记忆,重点在写对、写稳、写快;驱动类名与mysql版本严格匹配,url须含端口与时区等关键参数,资源关闭须按resultset→statement→connection顺序,强制使用preparedstatement防注入并提升性能,查询结果应封装为java对象,每次练习覆盖完整crud链路。

搞清驱动和URL,一步都不能错
驱动类名和数据库版本必须严格匹配:MySQL 8.0+ 用 com.mysql.cj.jdbc.Driver,5.x 用 com.mysql.jdbc.Driver;现代项目(JDK 8+ + MySQL 8.0.26+)可省略Class.forName(),但显式加载仍是安全习惯。
URL 格式不能只记模板,要理解每个参数作用:
-
协议头:固定为
jdbc:mysql:// -
主机与端口:本地默认是
localhost:3306,远程需确认防火墙和权限 -
数据库名:必须已存在,如
/mydb -
关键参数:加上
?useSSL=false&serverTimezone=UTC避免时区和证书报错
jdbc:mysql://localhost/mydb 缺少端口和参数,运行时大概率抛 CommunicationsException。
Connection 和 Statement 必须配对关闭
资源不释放 = 内存泄漏 + 连接耗尽。关闭顺序有硬性要求:先 ResultSet,再 Statement,最后 Connection。 推荐写法是 try-with-resources(JDK 7+):try (Connection conn = DriverManager.getConnection(url, user, pwd);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id,name FROM user")) {
while (rs.next()) {
System.out.println(rs.getInt("id") + ": " + rs.getString("name"));
}
} // 自动按逆序关闭,无需手动 catch finally
不用 try-with-resources 的话,务必在 finally 块中逐个判空关闭,且每个 close() 单独 try-catch,防止前一个异常掩盖后一个。
所有带参数的 SQL,无条件用 PreparedStatement
Statement 只适合写死的、纯调试用的 SQL;真实业务中,只要 SQL 含变量(哪怕只是 ID),就必须用 PreparedStatement。
它不只是防 SQL 注入——更是性能优化的关键:
- SQL 模板只编译一次,多次执行复用执行计划
- 参数自动转义,不用拼字符串,避免引号/转义符混乱
- 类型安全:
setInt(1, 100)比"'"+100+"'"更可靠
String sql = "INSERT INTO user(name, age) VALUES(?, ?)";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, "张三");
ps.setInt(2, 28);
ps.executeUpdate();
}
查数据别只拿 ResultSet,要封装成对象
直接遍历ResultSet 是入门写法;硬核练习要立刻升级到“结果集映射”。
最简实践:手写工具方法,把一行转成 Java Bean:
public static User rowToUser(ResultSet rs) throws SQLException {
User u = new User();
u.setId(rs.getLong("id"));
u.setName(rs.getString("name"));
u.setAge(rs.getInt("age"));
return u;
}
进阶可尝试封装通用 BeanUtil.fillBean() 或引入轻量工具类(如 Apache Commons BeanUtils),目标是让 DAO 方法返回 List<user></user> 而非 ResultSet。
单次练习就覆盖完整链路:增删改查 + 异常 + 关闭
不要分四次练 insert、update、delete、select。每次动手,都写一个完整方法:- 连接数据库
- 插入一条测试数据
- 根据 ID 查询刚插的数据
- 更新它的某个字段
- 再查一次验证
- 最后删除它
- 全程用 try-with-resources,捕获
SQLException并打印堆栈
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











