【问题标题】:connection to Java DB always fails与 Java DB 的连接总是失败
【发布时间】:2026-01-27 14:40:01
【问题描述】:

Java DB 的文档说它与 JDK 捆绑在一起,我已经读过在以后的 Java 版本中不需要特殊的类加载(我有 Java 8)。但是,尝试连接它完全失败:

DriverManager.getConnection("jdbc:derby:testDB;create=true")

这会引发 SQLException,SQL 状态为 08001(连接失败)。

我也试过显式加载驱动类,但是也报错:

Class.forName("org.apache.derby.jdbc.ClientDriver");// ClassNotFoundException

下面的代码甚至无法编译,因为没有找到 derby 类:

DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver());

如何使用 Java DB 连接到数据库?

【问题讨论】:

  • 这很明显。将 jar 添加到您的项目中
  • 它仅在某些 JDK 版本和某些 Java 供应商的运行时类路径中自动出现。而且它从来没有在 compile 类路径中,你总是必须明确地将它添加到那里。

标签: java database derby


【解决方案1】:

要使用“内置”Java DB,您必须手动将 derby jar 添加到您的类路径中。这就是我在 Gradle 中的做法:

testCompile files("$System.env.JAVA_HOME/db/lib/derby.jar")

我不喜欢这个,因为这意味着你依赖于本地目录结构,而不是通过名称和版本号解析的正常依赖关系。

我曾期望“Java DB”完全集成到标准库中,但事实并非如此。它只是与每个 JDK 安装共存。由于这具有通常是过时的 derby 版本的额外缺点,我将忽略 Java DB 并仅使用 maven Central 的最新 derby 版本:

testCompile group: 'org.apache.derby', name: 'derby', version: '10.13.1.1'

还要注意之前需要的Class.forName(...) 语句仍然抛出ClassNotFoundException;声明不需要使德比工作。

【讨论】: