提问人:Ehrenmann 提问时间:11/7/2023 最后编辑:Ehrenmann 更新时间:11/7/2023 访问量:62
Java 抛出“没有合适的驱动程序”异常
Java throws a "No suitable driver" exception
问:
我正在尝试将 Java 程序连接到我的 Docker Localhost 上的数据库。 我正在使用 Maven 在 VSCode 中开发以管理我的依赖项。
为此,我将JDBC驱动程序“mariadb-java-client-2.7.3.jar”添加到我的资源文件夹中,并将其包含在pom依赖项中。
尝试运行程序时,它会抛出驱动程序异常:Fehlercode:
0
SQL 状态:08001
java.sql.SQLException:未找到适合 jdbc:mariadb://localhost:3306/aufgabe_4 的驱动程序
我浏览了有关此主题的各种其他问题,并尝试了一些东西,例如在尝试打开连接之前添加
。但是,这会导致另一个异常:
线程“main”java.lang.Error中的异常:未解决的编译问题:
未处理的异常类型 ClassNotFoundException
at com.datenbanken.aufgabe4.DBVerbindung.verbinden(DBVerbindung.java:15)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>
这是我的文件夹结构:
EDIT1:更新了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 的依赖项?
评论
localhost