首页
学习
活动
专区
圈层
工具
发布

java连接mysql数据库驱动

在 Java 中连接 MySQL 数据库,你需要使用 ​​MySQL 官方提供的 JDBC 驱动程序(Connector/J)​​,它是一个实现了 ​​JDBC(Java Database Connectivity)​​ 接口的驱动,让 Java 程序能够与 MySQL 数据库进行交互。


一、使用 Maven 引入 MySQL 驱动(推荐)

如果你使用 Maven 构建项目,直接在 pom.xml 中添加以下依赖即可:

✅ MySQL Connector/J 8.x(推荐,支持 MySQL 5.7 / 8.0 及以上)

代码语言:javascript
代码运行次数:0
复制
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version> <!-- 请使用最新版本,可到 https://mvnrepository.com/artifact/mysql/mysql-connector-java 查看 -->
</dependency>

🔒 建议定期检查 Maven CentralMySQL 官方 获取最新驱动版本。


二、Java 代码示例:连接 MySQL 数据库

下面是一个完整的 Java 示例代码,展示如何使用 JDBC 连接 MySQL 数据库,执行简单查询。

示例:连接 MySQL 并查询数据(MySQL 8.x)

代码语言:javascript
代码运行次数:0
复制
import java.sql.*;

public class MySQLExample {
    public static void main(String[] args) {
        // JDBC URL, 用户名和密码
        String url = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC";
        String user = "root";      // 替换为你的用户名
        String password = "123456"; // 替换为你的密码

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            // 1. 加载驱动(MySQL 8.x 可省略,因为 JDBC4 可自动加载,但显式写上也无害)
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 建立连接
            connection = DriverManager.getConnection(url, user, password);
            System.out.println("数据库连接成功!");

            // 3. 创建 Statement 对象
            statement = connection.createStatement();

            // 4. 执行 SQL 查询
            String sql = "SELECT * FROM your_table"; // 替换为你的表名
            resultSet = statement.executeQuery(sql);

            // 5. 处理结果集
            while (resultSet.next()) {
                // 假设表中有 id 和 name 两个字段
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                System.out.println("ID: " + id + ", Name: " + name);
            }

        } catch (ClassNotFoundException e) {
            System.err.println("找不到 JDBC 驱动类!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.err.println("数据库连接或查询出错!");
            e.printStackTrace();
        } finally {
            // 6. 关闭资源(倒序关闭)
            try {
                if (resultSet != null) resultSet.close();
                if (statement != null) statement.close();
                if (connection != null) connection.close();
                System.out.println("数据库连接已关闭。");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

三、JDBC URL 格式说明(重要)

MySQL JDBC 的连接 URL 基本格式为:

代码语言:javascript
代码运行次数:0
复制
jdbc:mysql://<host>:<port>/<database>?<参数>

示例(MySQL 8.x 推荐写法):

代码语言:javascript
代码运行次数:0
复制
jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true

常见参数说明:

参数

说明

useSSL=false

是否使用 SSL 连接,默认不建议在生产关闭,但在本地测试可设为 false

serverTimezone=UTC

指定时区,比如 UTC、Asia/Shanghai,​​非常重要,否则可能报时区错误​​

allowPublicKeyRetrieval=true

MySQL 8.x 可能要求,当使用 caching_sha2_password 认证插件时可能需要

characterEncoding=utf8

指定字符编码,如 utf8 或 utf8mb4(推荐 utf8mb4 支持完整的 Unicode,比如 emoji)

✅ 推荐完整写法(适合 MySQL 8.x,本地测试):

代码语言:javascript
代码运行次数:0
复制
jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8mb4

四、MySQL 5.x 与 8.x 驱动区别

版本

驱动类名

JDBC URL 示例

推荐驱动包

​​MySQL 5.x​​

com.mysql.jdbc.Driver(已废弃)

jdbc:mysql://localhost:3306/db

mysql-connector-java 5.x(如 5.1.49)

​​MySQL 8.x​​

com.mysql.cj.jdbc.Driver

jdbc:mysql://localhost:3306/db?serverTimezone=UTC

mysql-connector-java 8.x(如 8.0.33)

⚠️ ​​MySQL 8.x 推荐使用 com.mysql.cj.jdbc.Driver,而且必须指定时区(如 serverTimezone=UTCAsia/Shanghai),否则可能抛出如下错误:​

代码语言:javascript
代码运行次数:0
复制
The server time zone value 'xxx' is unrecognized ...

五、使用 try-with-resources 简化代码(Java 7+)

从 Java 7 开始,可以使用 ​​try-with-resources​​ 自动关闭资源(Connection, Statement, ResultSet),更安全、更简洁:

代码语言:javascript
代码运行次数:0
复制
import java.sql.*;

public class MySQLExampleSimple {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC";
        String user = "root";
        String password = "123456";

        // 使用 try-with-resources 自动关闭资源
        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM your_table")) {

            System.out.println("连接成功,查询数据:");

            while (rs.next()) {
                System.out.println(rs.getInt("id") + ", " + rs.getString("name"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

✅ 优点:无需手动关闭连接,代码更简洁,避免资源泄露。


六、常见问题

1. ​​ClassNotFoundException: com.mysql.cj.jdbc.Driver​

原因:没有引入 MySQL JDBC 驱动依赖(比如 Maven 未正确配置或驱动 jar 未放入 classpath)

✅ 解决方案:

  • Maven 项目:检查 pom.xml 是否引入了 mysql-connector-java
  • 非 Maven 项目:手动下载 MySQL Connector/J 并添加到项目的 classpath 中

2. ​​The server time zone value 'xxx' is unrecognized​

原因:MySQL 8.x 默认要求指定时区

✅ 解决方案:在 JDBC URL 中添加参数:

代码语言:javascript
代码运行次数:0
复制
serverTimezone=UTC
// 或者
serverTimezone=Asia/Shanghai

3. ​​Public Key Retrieval is not allowed​

原因:MySQL 8 使用 caching_sha2_password 认证方式,某些客户端连接需要允许公钥检索

✅ 解决方案:在 JDBC URL 中添加:

代码语言:javascript
代码运行次数:0
复制
allowPublicKeyRetrieval=true

(注意:此选项有安全风险,仅限测试环境使用。生产环境建议使用正确的 SSL 配置与账号权限。)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券