JDBC连接Mysql模板(含查询+更新)
✨ 核心思路
1. 模板化复用:固定代码不用改,只需替换数据库连接参数
2. 资源自动管理:使用 try-with-resources 自动关闭连接、Statement、ResultSet,避免内存泄漏
3. 安全防注入:更新操作使用 PreparedStatement ,防止SQL注入风险
完整可运行代码
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.PreparedStatement; public class ReadStudents { public static void main(String[] args) { // ========== 只改这3个参数!!! ========== String url="jdbc:mysql://localhost:3306/student_db?useSSL=false&serverTimezone=UTC"; String user="root"; String password="123456"; // ========== 以下是固定模板,无需修改 ========== // try-with-resources 自动关闭资源,无需手动close try(Connection connection = DriverManager.getConnection(url,user,password)){ // 加载MySQL驱动(新版本JDBC可省略,但写上更兼容) Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("✅ 数据库连接成功"); // 调用更新方法 updateData(connection); // 创建Statement对象执行查询 try(Statement statement = connection.createStatement()){ String sql="SELECT * FROM students"; try(ResultSet resultSet = statement.executeQuery(sql)){ System.out.println("\n📋 学生列表"); while (resultSet.next()){ int id=resultSet.getInt("id"); String name=resultSet.getString("name"); // 修正:getNString → getString int age=resultSet.getInt("age"); System.out.printf("ID:%d, 姓名:%s, 年龄:%d%n",id,name,age); } } } }catch (ClassNotFoundException e){ System.err.println("❌ 驱动加载失败!"); e.printStackTrace(); }catch (SQLException e){ System.err.println("❌ 数据库操作出错!"); e.printStackTrace(); }catch (Exception e){ e.printStackTrace(); } } /** * 更新数据示例(使用PreparedStatement防止SQL注入) */ private static void updateData(Connection connection) throws SQLException { String sql="UPDATE students SET age=? WHERE id=?"; try(PreparedStatement pstmt = connection.prepareStatement(sql)){ // 设置SQL参数 pstmt.setInt(1,22); // age=22 pstmt.setInt(2,1); // WHERE id=1 // 执行更新 int affectedRows=pstmt.executeUpdate(); System.out.println("🔄 更新了"+affectedRows+"行数据"); } } }此次过程中遇到的问题
1.驱动类名写错 ClassNotFoundException: com.mysql.jdbc.Driver
问题现象
加载驱动时抛出异常,提示找不到驱动类。
排查过程
一开始写的是 com.mysql.jdbc.Driver ,后来发现 MySQL 8.0+ 的驱动类名改了,旧版驱动名不兼容。
解决方法
MySQL 8.0+ 驱动类名是 com.mysql.cj.jdbc.Driver ,并且可以省略手动加载驱动(JDBC 4.0 自动加载)
2.getNString() 方法报错 NullPointerException
问题现象
查询 name 字段时,用 resultSet.getNString("name") 直接返回空指针。
排查过程
查了 MySQL 官方文档才知道, getNString() 是专门用来获取 NCHAR/NVARCHAR 类型的,MySQL 普通字符串用 VARCHAR ,所以用不了这个方法。
解决方法
换成 getString() 方法,兼容所有字符串类型