Java 抛出“没有合适的驱动程序”异常

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

我正在尝试将 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");

在尝试打开连接之前。然而,这导致了另一个例外:
线程“main”java.lang.Error中出现异常:未解决的编译问题: 未处理的异常类型 ClassNotFoundException 在 com.datenbanken.aufgabe4.DBVerbindung.verbinden(DBVerbindung.java:15)

如果这个问题已经得到解答,我深表歉意,但我找不到任何适合我的解决方案。

这是我的源代码:

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>
java docker maven jdbc
1个回答
0
投票

POM 说

<scope>system</scope>

并且它不会被包含在罐子中。您必须在容器的设置中提供驱动程序或将其包含到工件中

<scope>runtime</scope>

为什么不包含来自 Maven Central 的依赖 https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client/2.7.3 ?

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