杰瑞科技汇

Java连接MySQL需哪些jar包?

核心概念:JDBC 和 MySQL Connector/J

  1. JDBC (Java Database Connectivity): 这是 Java 提供的一套标准 API(应用程序接口),用于执行 SQL 语句,它定义了如何连接数据库、执行查询、获取结果等操作,你可以把它想象成 Java 和数据库之间的“通用语言”或“翻译官”。

    Java连接MySQL需哪些jar包?-图1
    (图片来源网络,侵删)
  2. MySQL Connector/J: 这是 MySQL 官方提供的 JDBC 驱动程序,它实现了 JDBC 接口,使得 Java 程序能够“说” MySQL 数据库能听懂的语言,你下载的 JAR 包就是这个驱动程序。


获取 MySQL Connector/J JAR 包

你需要从 MySQL 官方网站下载最新的 JDBC 驱动。

  1. 访问官网:前往 MySQL Connector/J 下载页面
  2. 选择版本
    • Platform Independent (独立平台): 这是推荐的选择,它是一个 ZIP 压缩包,包含 .jar 文件,适用于任何操作系统。
    • Operating System: 如果你使用的是特定的 IDE(如 IntelliJ IDEA 或 Eclipse),它们可能会提供自动下载的选项,但手动下载总是最可靠的。
  3. 下载并解压:下载 ZIP 文件并解压,你会找到一个名为 mysql-connector-j-8.0.xx(版本号可能不同)的文件夹,里面有一个核心文件:mysql-connector-j-8.0.xx.jar,这个就是你需要添加到项目中的 JAR 包。

版本注意

  • mysql-connector-j-8.x.x.jar: 用于连接 MySQL 8.0+MariaDB 10.2+,这是目前的主流版本。
  • mysql-connector-java-5.1.xx-bin.jar: 用于连接 MySQL 5.x 或更早版本,如果你使用的是旧版数据库,才需要这个。强烈建议使用新版驱动连接新版数据库

将 JAR 包添加到你的 Java 项目

这一步是告诉你的项目(编译器和运行时环境)去哪里找这个驱动,根据你使用的开发工具,方法不同。

Java连接MySQL需哪些jar包?-图2
(图片来源网络,侵删)

方法 A: 使用 IDE (推荐)

这是最简单、最常用的方法。

以 IntelliJ IDEA 为例:

  1. 打开你的项目。
  2. 在左侧的 Project 窗口中,右键点击你的项目名称(或 lib 文件夹,如果没有就创建一个)。
  3. 选择 Add as Library... (或 Add as Framework...)。
  4. 在弹出的窗口中,点击 Attach Files... 或 号。
  5. 浏览并选择你刚刚下载的 mysql-connector-j-8.0.xx.jar 文件。
  6. 确认库的作用域(通常保持默认的 CompileRuntime 即可),然后点击 OK

以 Eclipse 为例:

  1. Project Explorer 中,右键点击你的项目。
  2. 选择 Build Path -> Configure Build Path...
  3. Libraries 标签页中,点击 Add External JARs...
  4. 浏览并选择 mysql-connector-j-8.0.xx.jar 文件。
  5. 点击 Apply and Close

方法 B: 使用构建工具 (Maven/Gradle)

这是现代 Java 项目的标准做法,无需手动下载和添加 JAR 包。

Java连接MySQL需哪些jar包?-图3
(图片来源网络,侵删)

使用 Maven (pom.xml):

在你的 pom.xml 文件的 <dependencies> 标签内添加以下依赖:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version> <!-- 使用你需要的最新版本 -->
</dependency>

Maven 会自动下载并管理这个依赖。

使用 Gradle (build.gradlebuild.gradle.kts):

在你的 dependencies 代码块中添加:

// Groovy DSL
implementation 'com.mysql:mysql-connector-j:8.0.33' // 使用你需要的最新版本
// Kotlin DSL
implementation("com.mysql:mysql-connector-j:8.0.33") // 使用你需要的最新版本

编写 Java 连接代码

万事俱备,可以写代码了,下面是一个完整的、包含最佳实践的示例。

准备工作

确保你已经有一个 MySQL 数据库在运行,并且创建了一个数据库和用户。

-- 在 MySQL 命令行中执行
CREATE DATABASE my_test_db;
CREATE USER 'java_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON my_test_db.* TO 'java_user'@'localhost';
FLUSH PRIVILEGES;

完整 Java 代码示例

这个例子展示了如何连接数据库、执行一个简单的查询,并正确处理资源和异常。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MysqlJdbcExample {
    // 数据库连接信息
    // MySQL 8.0+ 的驱动类名是 com.mysql.cj.jdbc.Driver
    // URL 格式: jdbc:mysql://[主机名]:[端口]/[数据库名]?[属性]
    private static final String DB_URL = "jdbc:mysql://localhost:3306/my_test_db?useSSL=false&serverTimezone=UTC";
    private static final String USER = "java_user";
    private static final String PASS = "your_password";
    public static void main(String[] args) {
        // 使用 try-with-resources 语句,可以自动关闭资源
        // Connection, Statement, ResultSet 都实现了 AutoCloseable 接口
        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT 'Hello, MySQL!' AS message")) {
            // 检查连接是否成功
            if (conn != null) {
                System.out.println("连接数据库成功!");
            }
            // 处理结果集
            while (rs.next()) {
                // 通过列名获取数据,更安全
                String message = rs.getString("message");
                System.out.println("从数据库获取到的消息: " + message);
            }
        } catch (SQLException e) {
            // 捕获并处理 SQL 异常
            System.err.println("数据库连接或查询失败!");
            e.printStackTrace();
        }
        // try-with-resources 会自动在这里关闭 conn, stmt, rs
        // 即使发生异常,它们也会被正确关闭
    }
}

代码关键点解析

  1. 加载驱动 (旧版方式): 在 JDBC 4.0 (Java 6+) 之后,已经不再需要显式地加载驱动类 Class.forName("com.mysql.cj.jdbc.Driver"),JDBC 驱动会通过 META-INF/services/java.sql.Driver 文件自动注册,在现代代码中你可以省略这一步。

  2. DriverManager.getConnection(): 这是获取数据库连接的核心方法,它需要三个参数:

    • DB_URL: 数据库的统一资源定位符。
      • jdbc:mysql://: 协议和子协议。
      • localhost:3306: 数据库服务器地址和端口。
      • /my_test_db: 要连接的数据库。
      • ?useSSL=false&serverTimezone=UTC: URL 属性。useSSL=false 用于开发环境(生产环境应配置 SSL)。serverTimezone=UTC 指定时区,避免时区警告。
    • USER: 数据库用户名。
    • PASS: 数据库密码。
  3. try-with-resources 语句: 这是 Java 7 引入的一个非常重要的特性,它会自动实现了 AutoCloseable 接口的对象(如 Connection, Statement, ResultSet)在代码块执行完毕后关闭,即使发生异常也能保证关闭,这极大地简化了资源管理,避免了资源泄漏。

  4. SQLException: 所有与数据库交互的操作都可能抛出 SQLException,因此必须用 try-catch 块来处理它。


常见问题与解决方案

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

原因: JVM 在运行时找不到 MySQL 驱动类,这几乎总是因为 JAR 包没有被正确添加到项目的类路径(Classpath)中解决方案:

  • 回到 步骤二,仔细检查你是否将 mysql-connector-j-8.0.xx.jar 成功添加到了你的项目中。
  • 如果你使用的是 Maven 或 Gradle,确保 pom.xmlbuild.gradle 文件中的依赖配置正确,并且已经执行了 mvn installgradle build

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.

原因: 你的 MySQL 服务器或客户端系统时区与 Java 程序的默认时区不匹配。 解决方案: 在 JDBC URL 中添加时区属性,如上面代码所示:

private static final String DB_URL = "jdbc:mysql://localhost:3306/my_test_db?serverTimezone=UTC";
// 或者使用你的本地时区,如 Asia/Shanghai
// private static final String DB_URL = "jdbc:mysql://localhost:3306/my_test_db?serverTimezone=Asia/Shanghai";

java.sql.SQLException: Access denied for user 'java_user'@'localhost'

原因: 用户名或密码错误,或者该用户没有连接到指定数据库的权限。 解决方案:

  • 检查代码中的 USERPASS 是否正确。
  • 登录 MySQL,使用 GRANT 命令确保用户权限正确(参考准备工作中的 SQL 语句)。

Communications link failure

原因: 无法连接到 MySQL 服务器。 解决方案:

  • MySQL 服务是否启动? 检查你的 MySQL 服务是否正在运行。
  • 地址和端口是否正确? localhost 对应的是 0.0.1,MySQL 安装在其他机器上,请使用正确的 IP 地址,默认端口是 3306,如果不是,请修改 URL 中的端口号。
  • 防火墙是否阻止? 检查本地或服务器的防火墙设置,是否允许 3306 端口的通信。

连接 MySQL 数据库的流程可以概括为:

  1. 获取驱动: 下载 mysql-connector-j-x.x.x.jar
  2. 配置项目: 将 JAR 包添加到项目类路径中(通过 IDE 或 Maven/Gradle)。
  3. 编写代码:
    • 使用 DriverManager.getConnection() 获取 Connection 对象。
    • 使用 Connection 创建 Statement 对象。
    • 使用 Statement 执行 SQL,获取 ResultSet
    • 遍历 ResultSet 处理数据。
  4. 管理资源: 使用 try-with-resources 确保 Connection, Statement, ResultSet 被正确关闭。
  5. 处理异常: 用 try-catch 捕获 SQLException
分享:
扫描分享到社交APP
上一篇
下一篇