我最近开始为我的 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)
。
到目前为止我完全不知道是什么原因造成的。
您的 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 文件
成绩列表:
第2步:
在
minecraft/libraries/
中,创建一个子目录,并将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,还可以使用文件资源管理器手动创建对应的目录,并将文件复制到对应的目录中。