杰瑞科技汇

Java连接MySQL的URL格式怎么写?

核心要素

一个标准的 JDBC URL 通常包含以下几个部分:

Java连接MySQL的URL格式怎么写?-图1
(图片来源网络,侵删)
jdbc:mysql://[host][:port]/[database][?property1=value1&property2=value2]
  • jdbc:mysql://: 这是协议头,表示使用 MySQL 的 JDBC 驱动。
  • [host]: 数据库服务器的地址,可以是 IP 地址(如 168.1.100)或域名(如 localhostdb.example.com),如果连接本机,可以省略,但保留更清晰。
  • [:port]: 数据库服务器的端口号,MySQL 的默认端口是 3306,如果使用默认端口,可以省略。
  • /[database]: 要连接的具体数据库名称。这是必需的
  • [?...]: 这是可选的连接参数部分,用于设置字符集、时区、SSL 等高级配置。

使用 Connector/J 8.x (推荐,适用于 MySQL 8.0+)

这是目前最推荐的方式,因为它支持 MySQL 8.0 的新特性,如 caching_sha2_password 认证插件。

基础 URL

// 连接到本地(localhost)的 3306 端口上的 'testdb' 数据库
String url = "jdbc:mysql://localhost:3306/testdb";

添加关键参数(强烈推荐)

在实际开发中,强烈建议在 URL 中添加一些关键参数,以避免常见问题。

  • useSSL=false: 在开发环境中禁用 SSL 连接(MySQL 8.0+ 默认启用)。注意:在生产环境中,为了安全,应该配置正确的 SSL 证书,而不是简单地禁用。
  • serverTimezone=UTC: 设置服务器时区,防止因时区问题导致的时间错误。UTC 是一个通用的选择,你也可以设置为 Asia/Shanghai 等。
  • characterEncoding=UTF-8: 设置字符集为 UTF-8,以避免中文等特殊字符乱码。

组合后的 URL 示例:

String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";

完整代码示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class MySQLConnectorExample {
    // 数据库连接 URL
    private static final String DB_URL = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";
    // 数据库用户名
    private static final String USER = "root";
    // 数据库密码
    private static final String PASS = "your_password";
    public static void main(String[] args) {
        // try-with-resources 语句,可以自动关闭资源
        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
             Statement stmt = conn.createStatement()) {
            System.out.println("数据库连接成功!");
            // --- 在这里执行你的 SQL 查询 ---
            String sql = "SELECT 'Hello, MySQL!' AS message";
            // stmt.executeUpdate(sql); // 用于执行 INSERT, UPDATE, DELETE
            // ResultSet rs = stmt.executeQuery(sql); // 用于执行 SELECT
            // ... 处理结果集 ...
        } catch (SQLException e) {
            System.err.println("数据库连接失败!");
            e.printStackTrace();
        }
    }
}

使用 Connector/J 5.x (适用于 MySQL 5.7 及更早版本)

如果你使用的是旧版本的 MySQL(如 5.7),或者项目依赖旧版驱动,可以使用这种格式。

Java连接MySQL的URL格式怎么写?-图2
(图片来源网络,侵删)

基础 URL

String url = "jdbc:mysql://localhost:3306/testdb";

添加关键参数

对于旧版驱动,参数略有不同,但核心思想一致。

  • useUnicode=true&characterEncoding=UTF-8: 字符集设置方式。
  • autoReconnect=true: 自动重连,对于长时间运行的应用很有用。
  • failOverReadOnly=false: 连接失败后,以非只读模式重连。

组合后的 URL 示例:

String url = "jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true";

通过 SSL 连接(生产环境推荐)

在生产环境中,为了保证数据安全,强烈建议启用 SSL/TLS 加密连接。

URL 格式

只需在 URL 中添加 useSSL=true

Java连接MySQL的URL格式怎么写?-图3
(图片来源网络,侵删)
String url = "jdbc:mysql://localhost:3306/testdb?useSSL=true&serverTimezone=UTC";

完整示例(需要服务器证书)

如果你的 MySQL 服务器配置了自签名证书或 CA 签名的证书,你需要让客户端信任它。

URL 参数说明:

  • useSSL=true: 启用 SSL。
  • verifyServerCertificate=true: 验证服务器证书的有效性。
  • requireSSL=true: 强制使用 SSL。
  • clientCertificateKeyStoreUrl: 客户端证书库的路径(URL)。
  • clientCertificateKeyStorePassword: 客户端证书库的密码。
  • trustCertificateKeyStoreUrl: 信任证书库(存放 CA 证书)的路径。

示例:

假设你有一个 truststore.jks 文件来存放服务器的 CA 证书。

String url = "jdbc:mysql://localhost:3306/testdb" +
             "?useSSL=true" +
             "&verifyServerCertificate=true" +
             "&requireSSL=true" +
             "&trustCertificateKeyStoreUrl=file:/path/to/your/truststore.jks" +
             "&trustCertificateKeyStorePassword=your_truststore_password";
// 在加载驱动后,需要设置系统属性来指定 truststore
// System.setProperty("javax.net.ssl.trustStore", "/path/to/your/truststore.jks");
// System.setProperty("javax.net.ssl.trustStorePassword", "your_truststore_password");

总结与最佳实践

特性 Connector/J 8.x (推荐) Connector/J 5.x (旧版)
适用 MySQL 版本 0, 8.1, 8.2+ 1, 5.5, 5.7
认证插件 支持 caching_sha2_password 默认支持 mysql_native_password
SSL 参数 useSSL=true/false useSSL=true/false
字符集参数 characterEncoding=UTF-8 useUnicode=true&characterEncoding=UTF-8
时区参数 serverTimezone=UTC 不需要,或用 jdbc:mysql://.../?useTimezone=true

最佳实践清单:

  1. 使用最新的驱动:始终从 MySQL 官网 下载最新的 Connector/J 驱动。
  2. 使用 Maven/Gradle:不要手动下载 JAR 包,使用依赖管理工具可以自动处理版本和下载。
    • Maven:
      <dependency>
          <groupId>com.mysql</groupId>
          <artifactId>mysql-connector-j</artifactId>
          <version>8.0.33</version> <!-- 使用最新版本 -->
      </dependency>
    • Gradle:
      implementation 'com.mysql:mysql-connector-j:8.0.33' // 使用最新版本
  3. URL 必须包含关键参数:对于 8.x 版本,至少包含 serverTimezonecharacterEncoding,根据环境决定是否禁用 SSL。
  4. 不要硬编码凭据:不要将用户名和密码直接写在代码里,应该使用配置文件(如 application.properties)、环境变量或密钥管理服务。
  5. 使用 try-with-resources:确保 Connection, Statement, ResultSet 等资源在使用后能被正确关闭,防止资源泄露。
分享:
扫描分享到社交APP
上一篇
下一篇