☰
Java连接MySQL数据库,读取、遍历输出数据库查询结果ResultSet、使用“Class.forName(JDBC_DRIVER);”来注册加载驱动的原因
2026/10/16 14:20:20 网站建设 项目流程

Java连接、操作MySQL数据库

  • MySQL数据库简介
    • Java对于数据库常用操作的封装
  • 连接、操作MySQL数据库用到的类
    • Statement与数据库连接(Connection)
  • Java工程 连接、操作数据库
    • Class.forName(JDBC_DRIVER);来注册加载驱动的原因
    • 遍历输出MySQL查询结果java.sql.ResultSet
    • 完整代码示例
  • Java工程 通过连接池实现连接、操作数据库

MySQL数据库简介

此处先给出MySQL官网?

Java对于数据库常用操作的封装

Java通过提供统一API定义的方式来实现对各种数据库进行操作时Java代码编码层面的统一,有效减少了Java代码在跨数据库时——Java项目在数据库需要变更时需要修改代码的问题。这样做的好处是显而易见的,①使操作不同的数据库在Java层面得到了统一,有利于Java项目实现跨数据库,当然变更数据库时,项目中要导入对应数据库的jar包②淡化不同数据库版本在Java代码中的差异,从而进一步突出Java项目中的业务逻辑。在使用Java的时候,不用关心底层使用什么数据库,只需要关心业务逻辑即可。API的具体实现由各数据库厂商自己提供(jar包,以驱动的形式)。在使用的时候,只需在自己的项目中导入对应数据库驱动的jar包即可,示意图如下所示。

目前常用的数据库种类很多,比如常见的MySQL、Oracle、SqlServer、Sqlite… 这些数据库都有自己的特性,如果Java为每一种数据库开发一套API,进行数据库操作,那么将是很头疼的,原因如下:
1、每一种数据库都有差异,那么就代表每一套API的使用方法可能都不同;
2、不便于数据库迁移,比如,前期使用MySQL,到后期发现Oracle更加适合项目,于是将数据从MySQL迁移到Oracle中了,因为API不同,所以需要重新修改所有的SQL操作。
3、除此之外,这么多套API,维护起来也是很麻烦的;

连接、操作MySQL数据库用到的类

连接操作数据库过程中会用到的类,如下图所示。

Statement与数据库连接(Connection)

数据库连接(java.sql.Connection):代表应用程序与数据库服务器之间的物理或逻辑网络连接会话。

  • 层级‌:最高层级。它是进行任何数据库操作的前提。
  • 代价‌:创建和销毁 Connection 非常昂贵(涉及 TCP 握手、身份验证等),因此通常使用‌连接池‌(如 HikariCP, Druid)来管理,避免频繁创建。

Statement:代表一条特定的 SQL 语句对象,用于向数据库发送 SQL 命令并接收结果。它必须依附于某个 Connection存在。

  • 层级‌:中间层级。一个 Connection 可以同时创建多个 Statement。
  • 代价‌:创建 Statement 相对轻量,但依然涉及数据库端的资源分配(如解析 SQL、生成执行计划、占用游标等)。频繁创建和关闭 Statement 也会带来开销。

Java工程 连接、操作数据库

下面每一行代码的含义补入本文 三、
补入本文,好好看!

  1. 首先将jar包mysql-connector-java-8.0.30.jar导入Java工程的正确位置,通常在lib目录下。Java工程导入jar包的方法详见这篇博客。
  2. 设置JDBC驱动名和数据库URL,JDBC连接mysql数据库时默认使用IP地址127.0.0.1和端口号3306,所以当连接数据库与此一致时,可省略数据库地址和端口为jdbc:mysql:///test。
     
    ①MySQL 8.0 以下版本 - JDBC 驱动名(即jar包中的名称),注册JDBC驱动及数据库 URL
    static final String JDBC_DRIVER = “com.mysql.jdbc.Driver”;
    static final String DB_URL = “jdbc:mysql://localhost:3306/test”;
     
    ②// MySQL 8.0 以上版本 - JDBC 驱动名(即jar包中的名称),注册JDBC驱动及数据库 URL
    static final String JDBC_DRIVER = “com.mysql.cj.jdbc.Driver”;
    static final String DB_URL = “jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC”;

因为本次使用的是mysql-connector-java-8.0.30.jar,如第一步中所述。若使用①中配置url,在第3步使用JDBC_DRIVER注册JDBC驱动时,会报如下错误Loading class 'com.mysql.jdbc.Driver'. This is deprecated. The new driver class is 'com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.。

  1. 加载数据库驱动(即jar包中的名称),注册JDBC驱动:Class.forName(JDBC_DRIVER);。

Class.forName(JDBC_DRIVER);来注册加载驱动的原因

Class.forName(类名)是让JVM查找并加载该类名对应的类中的静态代码块,而本文示例中使用的是MySQL数据库,所以选择com.mysql.jdbc.Driver类(MySQL数据库厂商提供的 JDBC 驱动,并借助于这些驱动连接数据库)中正好只有一段静态代码——使用Jdbc程序中的DriverManager来加载驱动,由此创建与数据库的链接,如下所示。

所以删除本句话及catch中本句,可能抛出的异常。

在实际开发中之所以推荐使用Class.forName(“com.mysql.jdbc.Driver”);,而非registerDriver方法,来注册驱动,这是因为:
如果代码中直接使用mysql的jar包

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询