无法让驱动程序连接到 MariaDB

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

我最近开始为我的 Minecraft 服务器制作一个插件,需要使用数据库进行持久存储。因此,我现在尝试使用机器上的 MariaDB 服务器(我可以从终端很好地使用它)来存储我需要的信息,但我在连接时遇到问题。

将代码最小化到抛出异常的部分,我的代码片段如下所示。

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

public final class Extrelco extends JavaPlugin {
    // This function will be called by the server once at startup
    @Override
    public void onEnable() {
        Class.forName("org.mariadb.jdbc.Driver");
        Connection connection = DriverManager.getConnection(
                "jdbc:mariadb://localhost:3306/databasename", "username", "password"
        );
    }
}

我得到的例外是:

java.lang.ClassNotFoundException: org.mariadb.jdbc.Driver
我已经尝试过查找。 这个问题甚至和我有同样的问题,但OP只是没有将驱动程序添加到
CLASSPATH
,我已经根据这个问题在IntelliJ Idea中使用手动依赖管理完成了。

我还尝试根据 我从其获取 JAR 的网站使用 Gradle 将驱动程序添加为依赖项,这促使我只需将

implementation 'org.mariadb.jdbc:mariadb-java-client:4.2'
添加到我的
build.gradle
即可。这也导致了同样的问题。

我还读到,

Class.forName()
调用是“注册驱动程序的传统方式”(对这个问题的最佳答案的评论),据此我尝试简单地删除调用。这给了我一个不同的例外,现在声明
java.sql.SQLException: No suitable driver found for... (my getConnectionCall above)

到目前为止我完全不知道是什么原因造成的。

java mariadb minecraft
1个回答
0
投票

您的 Mariadb JDBC 驱动程序使用:

org.mariadb.jdbc:mariadb-java-client:3.4.1

当你第一次编译程序时,Maven会下载mariadb-java-client-3.4.1.jar到这个路径,

~/.m2/repository/org/mariadb/jdbc/mariadb-java-client/3.4.1/mariadb-java-client-3.4.1.jar
,我知道你使用的是Gradle。重点是目录结构。

~/.m2/repository       
  /org/mariadb/jdbc/mariadb-java-client/3.4.1/mariadb-java-client-3.4.1.jar

您需要在 Minecraft 目录中创建相同的结构。

~/.minecraft/libraries 
  /org/mariadb/jdbc/mariadb-java-client/3.4.1/mariadb-java-client-3.4.1.jar

另外,mariadb-java-client-3.4.1还依赖了以下几个jar,所以也需要下载它们,并创建相应的目录,并将文件放入其中。

第 1 步:下载 Jar 文件

成绩列表:

  • org.mariadb.jdbc:mariadb-java-client:3.4.1
  • com.github.waffle:waffle-jna:3.3.0
  • net.java.dev.jna:jna:5.13.0
  • net.java.dev.jna:jna-平台:5.13.0
  • org.slf4j:jcl-over-slf4j:2.0.7
  • org.slf4j:slf4j-api:2.0.7
  • com.github.ben-manes.caffeine:咖啡因:2.9.3
  • com.google.errorprone:error_prone_annotations:2.10.0
  • org.checkerframework:checker-qual:3.32.0

第2步:

minecraft/libraries/
中,创建一个子目录,并将jar文件放入对应的子目录中。

  • org/mariadb/jdbc/mariadb-java-client/3.4.1/mariadb-java-client-3.4.1.jar
  • com/github/waffle/waffle-jna/3.3.0/waffle-jna-3.3.0.jar
  • net/java/dev/jna/jna/5.13.0/jna-5.13.0.jar
  • net/java/dev/jna/jna-platform/5.13.0/jna-platform-5.13.0.jar
  • org/slf4j/jcl-over-slf4j/2.0.7/jcl-over-slf4j-2.0.7.jar
  • org/slf4j/slf4j-api/2.0.7/slf4j-api-2.0.7.jar
  • com/github/ben-manes/caffeine/caffeine/2.9.3/caffeine-2.9.3.jar
  • com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.jar
  • org/checkerframework/checker-qual/3.32.0/checker-qual-3.32.0.jar

示例:

Linux命令,进入你的minecraft目录,

假设mariadb-java-client-3.4.1.jar下载到此目录(

~/Downloads
)。

cd libraries
mkdir -p org/mariadb/jdbc/mariadb-java-client/3.4.1
cp ~/Downloads/mariadb-java-client-3.4.1.jar org/mariadb/jdbc/mariadb-java-client/3.4.1/

检查文件是否放置在正确的位置。

ls -la libraries/org/mariadb/jdbc/mariadb-java-client/3.4.1/mariadb-java-client-3.4.1.jar

如果您使用的是Windows,还可以使用文件资源管理器手动创建对应的目录,并将文件复制到对应的目录中。

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