java通过jdbc连接mysql并用preparedstatement实现crud操作,需先确保驱动加载、url正确、连接成功并关闭;全程使用预编译语句防sql注入,按resultset→statement→connection顺序关闭资源,推荐try-with-resources自动管理。

直接上手练,重点不是背概念,而是让每一步操作有反馈、有结果、能调试。
从连接开始,确保能通数据库
别跳过这步。很多问题卡在连接失败,但错误信息不明显。先写最简代码,只做一件事:连上 MySQL 并打印“连接成功”。
- 确认驱动 JAR 已加进项目(如 mysql-connector-java-8.0.33.jar)
- URL 写全参数:
jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8 - 用 try-catch 包住 getConnection,打印 SQLException 的 getMessage(),而不是只 printStackTrace()
- 连通后立刻 close(),避免端口占满或连接泄漏
用 PreparedStatement 做增删改查,绕开 SQL 注入
不用 Statement 拼接字符串,从第一行 CRUD 就用 PreparedStatement。这是高频考点,也是实际开发底线。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 插入:用
INSERT INTO user(name, age) VALUES(?, ?),再 setString(1, "张三")、setInt(2, 25) - 查询:用
SELECT * FROM user WHERE name = ?,避免"WHERE name = '" + name + "'" - 更新/删除:同样用 ? 占位,执行 executeUpdate(),检查返回值是否为 1(表示影响一行)
- 注意:预编译语句对象要复用,不要每次 new,但也不能跨线程共享
结果集处理要完整,别漏 next() 和类型匹配
ResultSet 不是数组,不能直接 get(0),必须调用 next() 移动游标;字段名大小写、空值、类型错配都会导致运行时报错。
- 遍历时一定写
while(rs.next()) { ... },不是if(rs.next())(除非明确只查一条) - 读字段优先用列名(
rs.getString("username")),比用序号更稳定 - 遇到 NULL 值:用
rs.wasNull()判断,或直接用包装类(rs.getInt("age")返回 0,但可能是真为 0 或 NULL) - 关闭顺序:ResultSet → Statement → Connection(反过来容易报“connection closed”)
加 try-with-resources,让资源自动释放
手动 close 容易遗漏或异常打断,面试和考试都倾向考察现代写法。
- 把 Connection、Statement、ResultSet 全部声明在 try() 小括号里
- JVM 自动按逆序 close,无需 finally 块
- 示例:
try (Connection conn = ...; PreparedStatement ps = ...; ResultSet rs = ...) { ... } - 注意:只有实现了 AutoCloseable 接口的对象才能这么写(JDBC 4.0+ 的所有核心类都支持)
练熟这四块,JDBC 主干逻辑就稳了。后续事务、连接池、存储过程都是在此基础上叠加,不会失焦。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










