You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复IntelliJ+Gradle环境下MySQL驱动类找不到的错误?

解决方案

1. 正确添加MySQL驱动的Gradle依赖

你的build.gradle未声明MySQL JDBC驱动依赖,手动放置lib目录的方式在Gradle项目中无法被正确识别。直接在dependencies块中添加官方依赖:

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
    // 添加MySQL驱动依赖,版本与你的MySQL服务器版本匹配
    implementation 'mysql:mysql-connector-java:8.0.33'
}
  • 若使用MySQL 8.0+版本,驱动类com.mysql.cj.jdbc.Driver是正确的,需确保驱动版本≥8.0;
  • 若使用MySQL 5.x版本,驱动类应为com.mysql.jdbc.Driver,依赖版本对应改为5.1.49等5.x系列版本。

2. 清理手动添加的驱动文件

删除手动放入lib目录的MySQL驱动jar包,避免Gradle依赖管理冲突。

3. 刷新Gradle依赖

在IntelliJ IDEA的Gradle面板中点击刷新按钮(💡图标),等待Gradle完成依赖下载与同步。

4. 配置Java模块依赖(若启用模块系统)

你的项目配置了mainModule,需在module-info.java中声明对MySQL驱动模块的依赖:

module system.test.librarysystem {
    requires javafx.controls;
    requires javafx.fxml;
    // 添加MySQL驱动模块依赖
    requires mysql.connector.java;
    // 若需要向其他模块暴露本模块的类,添加exports语句
    exports system.test.librarysystem;
}

5. 代码优化建议(避免潜在问题)

  • 修复JDBC URL时区问题:MySQL 8.0+要求指定时区,否则会抛出时区异常,修改URL:
String url = "jdbc:mysql://localhost/" + databaseName + "?serverTimezone=UTC&useSSL=false";
  • 避免SQL注入:当前登录验证SQL存在严重注入风险,改用PreparedStatement:
public void validateLogin() {
    DatabaseConnection connectNow = new DatabaseConnection();
    Connection connectDB = connectNow.getConnection();

    String verifyLogin = "SELECT count(1) FROM users WHERE username = ? AND password = ?";

    try {
        PreparedStatement pstmt = connectDB.prepareStatement(verifyLogin);
        pstmt.setString(1, usernameEntry.getText());
        pstmt.setString(2, passwordEntry.getText());
        ResultSet queryResult = pstmt.executeQuery();

        while(queryResult.next()) {
            if (queryResult.getInt(1) ==1 ) {
                loginLabel.setText("Welcome");
            } else {
                loginLabel.setText("Invalid login");
            }
        }
        // 关闭资源
        queryResult.close();
        pstmt.close();
        connectDB.close();
    } catch (Exception e) {
        e.printStackTrace();
        loginLabel.setText("Login failed");
    }
}
  • 异常处理优化:原代码中捕获异常后未做任何处理,建议添加日志或错误提示;
  • 资源关闭:使用完数据库连接、Statement、ResultSet后需手动关闭,或使用try-with-resources自动关闭。

内容的提问来源于stack exchange,提问作者matt gaming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:30:00