我正在尝试将 Java 程序连接到 Docker 本地主机上的数据库。 我正在 VSCode 中使用 Maven 进行开发来管理我的依赖项。
为此,我将 JDBC 驱动程序“mariadb-java-client-2.7.3.jar”添加到我的资源文件夹中,并将其包含在 pom 依赖项中。
当尝试运行程序时,它抛出驱动程序异常:
费勒代码:0
SQL状态:08001
java.sql.SQLException:找不到适用于 jdbc 的驱动程序:mariadb://localhost:3306/aufgabe_4
我查看了有关此主题的各种其他问题并尝试了一些操作,例如添加
Class.forName("org.mariadb.jdbc.Driver");
如果这个问题已经得到解答,我深表歉意,但我找不到任何适合我的解决方案。
这是我的源代码:
package com.datenbanken.aufgabe4;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBVerbindung {
private Connection con = null;
private String dbAdresse = "localhost:3306";
private String dbInstanz = "aufgabe_4";
public void verbinden(String nutzer, String passwort) {
try {
//Class.forName("org.mariadb.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mariadb://" + dbAdresse + "/"
+ dbInstanz, nutzer, passwort);
} catch (SQLException e) {
ausnahmeAusgeben(e);
}
}
private void ausnahmeAusgeben(SQLException e) {
while (e != null) {
System.err.println("Fehlercode: " + e.getErrorCode());
System.err.println("SQL State: " + e.getSQLState());
System.err.println(e);
e = e.getNextException();
}
}
public void verbindungTrennen() {
if (con == null) {
System.out.println("keine Verbindung vorhanden");
return;
}
try {
con.close();
} catch (SQLException e) {
ausnahmeAusgeben(e);
}
}
public void verbindungAnalysieren() {
if (con == null) {
System.out.println("keine Verbindung vorhanden");
return;
}
try {
DatabaseMetaData dbmd = con.getMetaData();
System.out.println("DB-Name: " + dbmd.getDatabaseProductName()
+ "\nDB-Version: " + dbmd.getDatabaseMajorVersion()
+ "\nDB-Release: " + dbmd.getDriverMinorVersion()
+ "\nTransaktionen erlaubt: " + dbmd.supportsTransactions()
+ "\nbeachtet GroßKlein: " + dbmd.storesMixedCaseIdentifiers()
+ "\nunterstützt UNION: " + dbmd.supportsUnion()
+ "\nmax. Prozedurname: " + dbmd.getMaxProcedureNameLength());
} catch (SQLException e) {
ausnahmeAusgeben(e);
}
}
public static void main(String[] s) {
DBVerbindung db = new DBVerbindung();
db.verbinden("root", "bitnami");
db.verbindungAnalysieren();
db.verbindungTrennen();
}
}
这是我的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.datenbanken.aufgabe4</groupId>
<artifactId>aufgabe4</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependency>
<groupId>com.datenbanken.aufgabe4</groupId>
<artifactId>aufgabe4</artifactId>
<version>2.7.3</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/mariadb-java-client-2.7.3.jar</systemPath>
</dependency>
</project>
这是我的文件夹结构:
编辑1:更新了pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.datenbanken.aufgabe4</groupId>
<artifactId>aufgabe4</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client (Dependency direkt von Maven)-->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.7.3</version>
</dependency>
</project>
POM 说
<scope>system</scope>
并且它不会被包含在罐子中。您必须在容器的设置中提供驱动程序或将其包含到工件中
<scope>runtime</scope>
为什么不包含来自 Maven Central 的依赖 https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client/2.7.3 ?