我在尝试连接到在 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 上找不到该库。
您能否查看所提供的信息并提出任何必要的更正或解决方案?
谢谢你。
您可以在 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也不正确。但多年来也不再需要了。