Java 17 项目连接 MySQL 8.0:VS Code 中 JDBC 驱动加载的 2 种方法与 1 个运行限制

在轻量级开发环境中,VS Code 凭借其丰富的插件生态和流畅的体验,正成为 Java 开发者连接数据库的新选择。本文将深入探讨两种主流驱动加载方式,并揭示一个容易被忽视的运行限制。

1. 驱动加载的两种核心路径

1.1 传统 JAR 文件直接引用

对于刚接触 Java 数据库开发的新手,直接引用 JAR 文件是最直观的方式。首先需要获取 MySQL Connector/J 驱动:

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.33/mysql-connector-java-8.0.33.jar

在 VS Code 项目中,右键点击 Referenced Libraries 选择添加 JAR 文件。完成后项目结构应显示如下:

project-root/
├── src/
│   └── Main.java
└── Referenced Libraries/
    └── mysql-connector-java-8.0.33.jar

关键检查点:

  • 确保驱动版本与 MySQL 服务端版本兼容
  • 推荐将 JAR 文件存放在项目目录下的 lib 文件夹中
  • 每次项目迁移时需同步驱动文件

1.2 构建工具依赖管理

现代 Java 项目更推荐使用 Maven 或 Gradle 管理依赖。在 pom.xml 中添加:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

或 Gradle 的 build.gradle

implementation 'mysql:mysql-connector-java:8.0.33'

优势对比表:

特性 直接引用 JAR 构建工具管理
版本更新便利性 需手动替换 自动解析
依赖传递 不支持 支持
项目体积 较小 较大
多环境适配 需手动调整 自动适应

2. 连接代码的现代实现

Java 17 引入了更多现代特性,下面是改进后的连接示例:

import java.sql.*;

public class MySQLDemo {
    private static final String URL = "jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=UTC";
    private static final String USER = "app_user";
    private static final String PASSWORD = "securePassword123";

    public static void main(String[] args) {
        // 使用try-with-resources确保资源自动关闭
        try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
             Statement stmt = conn.createStatement()) {
            
            // 创建表
            stmt.executeUpdate("""
                CREATE TABLE IF NOT EXISTS products (
                    id INT AUTO_INCREMENT PRIMARY KEY,
                    name VARCHAR(100) NOT NULL,
                    price DECIMAL(10,2)
                )""");

            // 使用预处理语句防止SQL注入
            String insertSQL = "INSERT INTO products (name, price) VALUES (?, ?)";
            try (PreparedStatement pstmt = conn.prepareStatement(insertSQL)) {
                pstmt.setString(1, "Wireless Mouse");
                pstmt.setBigDecimal(2, new BigDecimal("59.99"));
                pstmt.executeUpdate();
            }

            // 查询数据
            ResultSet rs = stmt.executeQuery("SELECT * FROM products");
            while (rs.next()) {
                System.out.printf("ID: %d, Name: %s, Price: %.2f%n",
                    rs.getInt("id"),
                    rs.getString("name"),
                    rs.getBigDecimal("price"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

注意:生产环境应使用连接池如 HikariCP,而非直接使用 DriverManager

3. 关键运行限制解析

VS Code 的 Code Runner 插件虽然方便,但在运行 JDBC 程序时会遇到 ClassNotFoundException 。这是因为:

  1. 类加载机制差异

    • Java 扩展使用完整的项目类路径
    • Code Runner 仅编译当前文件
  2. 解决方案对比

方案 优点 缺点
使用 Java 扩展运行 完整支持项目依赖 启动速度稍慢
配置 Code Runner 快速执行 需手动指定类路径
改用 Maven exec 完全控制执行环境 需要 Maven 知识

配置 Code Runner 的变通方法(不推荐长期使用):

{
  "code-runner.executorMap": {
    "java": "cd $dir && javac -cp .:./lib/* $fileName && java -cp .:./lib/* $fileNameWithoutExt"
  }
}

4. 高级调试技巧

当连接出现问题时,可启用详细日志:

// 在连接URL中添加参数
String debugURL = URL + "&logger=Slf4JLogger&profileSQL=true";

// 或者在代码中设置系统属性
System.setProperty("com.mysql.cj.log.enabled", "true");
System.setProperty("com.mysql.cj.log.standard", "DEBUG");

常见错误排查指南:

  1. SSL 连接问题

    • 错误信息: SSL must be enabled
    • 解决方案:在连接字符串添加 useSSL=false
  2. 时区设置问题

    • 错误信息: The server timezone value is unrecognized
    • 解决方案:添加 serverTimezone=UTC 参数
  3. 认证方式不匹配

    • 错误信息: Authentication plugin 'caching_sha2_password' cannot be loaded
    • 解决方案:修改用户认证方式或升级驱动版本

在项目实践中,将这些配置封装成工具类会大幅提升开发效率:

public class DBUtil {
    private static final HikariDataSource dataSource;
    
    static {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/demo");
        config.setUsername("app_user");
        config.setPassword("securePassword123");
        config.addDataSourceProperty("cachePrepStmts", "true");
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        dataSource = new HikariDataSource(config);
    }
    
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
}

掌握这些核心要点后,在 VS Code 中开发 Java 数据库应用将变得高效而稳定。记得定期检查驱动版本更新,MySQL 团队会持续修复安全漏洞和性能问题。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐