跳转到内容
我的世界XyeBBS论坛3群 进群吹水聊天!众多整合包作者、插件作者、玩家在内哦!不定时发福利,公布重要通知!
...

Minecraft SQLite JDBC

(Minecraft SQLite JDBC)
最新的 SQLite JDBC 驱动程序,被封装为适用于 Dynmap 和 Grim 等插件的通用 Forge/Fabric/Bukkit 库。
服务端/客户端前置API优化其它

Minecraft 的 SQLite JDBC

这是对已停更的 Minecraft SQLite JDBC 模组的一个维护分支,现已跟踪最新的 Xerial sqlite-jdbc 版本,并在上游发布新版本时自动升级。

该模组本身不执行任何操作——它将 SQLite JDBC 驱动程序部署到服务器的类路径上,这样其他希望透过 JDBC 读取或写入 .db/.sqlite 文件的插件/模组就无需各自捆绑一份副本。

典型使用者:Dynmap、Plan、LuckPerms、Grim Anti-Cheat,以及任何希望嵌入 SQLite 而不想自行重新分发 10MB 原生二进制文件的插件。

JAR 中包含的内容

org.xerial:sqlite-jdbc:3.53.0.0 加上用于 Spigot、Forge 1.12、Forge 1.13–1.16、Forge 1.17–1.20、NeoForge 1.21+ 和 Fabric 的最小化加载器存根。驱动类保持其规范的 org.sqlite.* 路径——未进行重定位——因此使用者可以通过简单的 Class.forName("org.sqlite.JDBC") 找到它们。META-INF/services/java.sql.Driver 已被保留,以便驱动程序通过 DriverManager 自动注册。

Xerial 驱动程序为每个常见平台/架构(linux x64/aarch64、macos x64/arm64、windows x64)捆绑了原生 SQLite 二进制文件。它们在首次使用时会被提取到 JVM 的临时目录中。

兼容性

加载器MC 版本备注
Bukkit / Spigot / Paper / Folia / Purpur1.8 → 当前放入 plugins/ 目录
Fabric1.16.1 → 当前需要 Fabric Loader 0.14+
Forge1.12 → 1.20通用 JAR,无需 Mixins
NeoForge1.21 → 当前放入 mods/ 目录

需要 Java 8+。没有 Java 8 的普通 BukkitAPI 服务器(任何早于 ~1.8.8 的版本)将无法加载任何现代 Xerial 版本;这是上游的限制,而非本模组的问题。

何时真正需要此模组

CraftBukkit/Spigot/Paper 自 1.4 时代的 ebeans 提交以来,一直在服务器的父类加载器中附带 sqlite-jdbc。插件类加载器采用父优先委托机制,因此对于默认 JDBC 路径(Class.forName("org.sqlite.JDBC") / DriverManager.getConnection), bundled 驱动程序始终胜出,无论 plugins/ 中有什么。已在 Paper 1.12.2 和 1.21.11 上进行实证测试。

您在以下情况需要此模组:

  • 您使用的是 Fabric 或 NeoForge —— 原版 Minecraft 完全不附带任何 JDBC 驱动程序
  • 您使用的是剥离了 bundled 驱动程序的 Bukkit 分支(这种情况很少见,但在精简版服务器构建中会发生)
  • 您想要比服务器 bundled 版本更新的 SQLite 引擎版本 —— 以便在 1.8–1.12 服务器上支持 RETURNING、STRICT 表、现代 UPSERT,或者仅仅是为了跟踪最新的 Xerial 版本。请参阅下方的 通过公共 API 使用更新的引擎。

通过公共 API 使用更新的引擎

默认路径使用 bundled 驱动程序。若要改用本模组的驱动程序,您的插件应软依赖于此持有者并直接调用 MinecraftSqliteJdbc.connect(url):

// 在您的 plugin.yml 中
softdepend: [sqlite-jdbc]
// 在您的插件代码中
Connection c;
try {
    c = MinecraftSqliteJdbc.connect("jdbc:sqlite:foo.db");
} catch (NoClassDefFoundError | ClassNotFoundException notInstalled) {
    // 未安装持有者 — 回退到 bundled 驱动程序
    c = DriverManager.getConnection("jdbc:sqlite:foo.db");
}

MinecraftSqliteJdbc 包装了一个子优先的 URLClassLoader,指向此 JAR 的 URL,其父加载器为平台类加载器,因此 org.sqlite.* 必须来自此 JAR(而非 bundled 链)。返回的 Connection 是标准的 java.sql.Connection —— 请保持您的强制类型转换为 java.sql.* 接口;实现类 org.sqlite.SQLiteConnection 位于子优先类加载器中,无法跨边界向下转型。

已在 Paper 1.12.2(bundled 引擎 3.21.0)上验证 —— 同一 JVM,同一启动过程:

基准 DriverManager.getConnection → 引擎 3.21.0
MinecraftSqliteJdbc.connect()        → 引擎 3.53.0

API 表面(全部为静态方法):

方法返回值
connect(String url)通过此驱动程序打开 Connection
connect(String url, Properties props)同上,带属性
driver()java.sql.Driver 实例
engineVersion()SQLite 引擎版本(例如 "3.53.0")
driverVersion()驱动程序版本字符串(例如 "3.53.0.0")
eagerInit()在插件启用时预热类加载器
shutdown()在插件禁用时释放文件句柄 + JNI

当安装此持有者且其提供的引擎版本新于 bundled 版本时,Grim Anti-Cheat 的 SQLite 后端会自动使用此 API —— 请参阅 Grim 的 数据库维基页面。

常见 Bukkit 系列上的 Bundled SQLite 引擎版本

如果您想知道您的服务器实际附带了什么引擎版本,可参考下表:

CraftBukkit / Paper 系列Bundled SQLite 引擎
1.8 – 1.103.7.2
1.113.16.1
1.123.21.0.1
1.133.25.2
1.143.28.0
1.153.30.1
1.16 – 1.173.34.0
1.20.63.45.3.0
Paper 1.21.43.47.0.0
Paper 1.21.5 – 1.21.113.49.1.0
master / 26.x3.51.3.0

本模组附带引擎 3.53.0.0(或最新的 xerial 版本),但这对 Bukkit 系列服务器无关紧要 —— 实际运行您查询的是 bundled 引擎。如果您需要更新的引擎以支持诸如 RETURNING(3.35+)或 STRICT 表(3.37+)等功能,请升级到 bundled 了足够新驱动程序的 Paper 版本,或者将该工作负载迁移到 Fabric/NeoForge,在那里您可以控制驱动程序。

从插件或模组中使用

将 sqlite-jdbc 声明为 compileOnly:

compileOnly("org.xerial:sqlite-jdbc:3.53.0.0")

在启动时探测:

try {
    Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
    getLogger().warning("SQLite 后端已禁用 — 请安装 minecraft-sqlite-jdbc");
    return;
}
try (Connection c = DriverManager.getConnection("jdbc:sqlite:" + dataDir.resolve("data.db"))) {
    // ...
}

在 Paper 1.17+ 上,每个插件的类加载器都是隔离的。将此模组添加到您的 plugin.yml 的 softdepend 中,以便您的插件可以看到驱动程序类:

softdepend: [minecraft-sqlite-jdbc]

Fabric 和 NeoForge 将所有模组统一在一个类加载器上,因此在那里不需要等效的声明。

版本控制

JAR 版本与 Xerial 的 sqlite-jdbc 版本一一对应。3.53.0.0+2026-04-14 附带引擎 3.53.0.0;后缀是构建日期。一个预定的 GitHub Action 每天检查 Maven Central —— 当 xerial 发布新版本时,此处会自动开启一个合并 PR,并且 Modrinth 版本会自动发布。

许可证

Apache 2.0 (Xerial / Taro L. Saito)。重新打包未添加任何功能更改,并继承该许可证。完整文本见 LICENSE。


问题与源码:GitHub。

资源外链

选择礼物

使用社区积分,为喜欢的作品送上一份支持

加载中...

打赏记录

感谢每一位送出礼物的社区成员

0 次支持0 积分
正在加载内容…