news 2026/7/22 23:11:15

JDBC连接Mysql模板(含查询+更新)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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() 方法,兼容所有字符串类型

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 23:04:14

全中文作者命名Nature子刊!北京大学+天津大学+湖南大学Nature Communications:纳秒级超快存储器,中红外光电存储器的存算一体新突破

集成光电系统致力于将电子学的逻辑与存储密度同光子学的带宽优势相结合,但单片集成受限于低效的电-光接口。当前架构依赖分离的读出电路和调制器,造成了能量和延迟瓶颈,而现有的直接转换方法往往在开关速度或非易失性上做出妥协。在此&#x…

作者头像 李华
网站建设 2026/7/22 23:03:21

AI 电动搅拌杯智能功率 MOSFET 核心选型方案

随着 AI 智能营养管理、多段位精准搅拌与温控成为高端搅拌杯标配,其内部驱动电路对功率 MOSFET 提出更高要求:高效率、高集成度、高可靠性。微碧半导体(VBsemi)基于成熟的 Trench 工艺,为您提供覆盖电机驱动、电源管理…

作者头像 李华
网站建设 2026/7/22 23:02:13

AI搜索总推荐竞品?见川GEO通过竞品洞察找优化缺口

不少品牌运营者会遇到这样的困惑:公司官网在传统搜索引擎里排名不错,但在向AI提问“XX领域哪个品牌好”时,却发现AI给出的推荐列表里全是竞品,自家的品牌几乎被“隐身”了。这种流量焦虑,正是因为AI搜索的推荐逻辑与传…

作者头像 李华
网站建设 2026/7/22 22:57:27

PPA方法:基于统计自一致性提升大语言模型推理能力

在自然语言处理领域,如何提升大语言模型的推理能力和输出一致性一直是研究热点。最近接触到一种名为"Partition, Prompt, Aggregate"(PPA)的方法,通过统计自一致性显著提升模型性能。这种方法特别适合解决复杂推理任务中…

作者头像 李华
网站建设 2026/7/22 22:52:09

【优化求解】基于粒子群优化PID优化水位附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

作者头像 李华