在java项目中连接到mySql数据库时出现问题

问题描述 投票:0回答:1

我在尝试连接到在 HeidiSQL 上创建的数据库时遇到问题。具体来说,我收到以下错误消息:

java.sql.SQLException:找不到适用于 jdbc:mysql://localhost:3306/mydbname 的驱动程序。

下面,我包含了导致错误的代码部分和我的 Gradle 文件,我用它来管理依赖项。

package utilities;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnectionUtil {
    // Imposta i dettagli della connessione al tuo database
    private static final String URL = "jdbc:mysql://localhost:3306/mydbname";
    private static final String USERNAME = "myUsername";
    private static final String PASSWORD = "myPassword";
    private static final String DRIVER = "org.mariadb.jdbc.Driver";

    // Metodo statico per ottenere una nuova connessione al database
    public static Connection getConnection() throws SQLException {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);
    }
}

构建.gradle.kts

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java application project to get you started.
 * For more details on building Java & JVM projects,
 * please refer to https://docs.gradle.org/8.6/userguide/building_java_projects.html in the Gradle documentation.
 */

plugins {
    application
    java
    id("com.github.johnrengelman.shadow") version "8.1.1"
    id("java-library")
}


repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    implementation("org.mariadb.jdbc:mariadb-java-client:3.3.3")
    implementation ("com.github.lgooddatepicker:LGoodDatePicker:11.2.1")
    testImplementation(libs.junit.jupiter)
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

// Apply a specific Java toolchain to ease working on different environments.
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

application {
    // Define the main class for the application.
    mainClass = "myLauncher"
}

tasks.named<Test>("test") {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}

我在网上搜索了潜在的解决方案,并找到了一些建议,例如包含 Class.forName(org.mariadb.jdbc.Driver)。然而,这不仅不再必要,而且还会触发错误 java.lang.ClassNotFoundException: org.mariadb.jdbc.Driver。

我还考虑了 Gradle 可能未正确包含库的可能性。然而,我正在使用的其他库运行正常,所以这似乎也不是问题。 另外,当我在终端中运行构建时,没有任何错误表明在 Maven 上找不到该库。

您能否查看所提供的信息并提出任何必要的更正或解决方案?

谢谢你。

java mysql gradle jdbc
1个回答
0
投票

您可以在 https://mariadb.com/kb/en/about-mariadb-connector-j/#jdbcmysql-scheme-compatibility 上阅读,MariaDB Connector/J 3.0 及更高版本仅接受

jdbc:mariadb:
方案默认值,因此如果您同时存在 MariaDB Connector/J 和 MySQL Connector/J,则会相应地选择每个连接器。

您可以将

?permitMysqlScheme
分配给 URL,以使 MariaDB Connector/J 处理
jdbc:mysql:
方案或改为使用
jdbc:mariadb:
方案。

Class.forName
不工作表明你的类路径不正确并且MariaDB Connector/J JAR也不正确。但多年来也不再需要了。

© www.soinside.com 2019 - 2024. All rights reserved.