【问题标题】:JDBC driver for derby 10.15.2.0?德比 10.15.2.0 的 JDBC 驱动程序?
【发布时间】:2021-10-09 01:30:35
【问题描述】:

我需要在 Java 中使用 JDBC 做一些简单的实验,并认为运行一个 derby 数据库应该是一个简单的途径。

我已经安装了 derby,并使用“ij”工具创建了一个表并将一些数据放入其中。我也可以使用 ij 读取该数据。

但是,当我尝试使用实际的 Java 代码连接到这个时,事情变得很糟糕。这是我尝试了几件事的情况之一,每件事都以不同的方式失败,所以我希望你们都原谅这有点模糊。但这些是我迄今为止尝试/失败的关键点。

  • 这是一个 maven 项目,artifactId "derbyclient" 版本 10.15.2.0 存在一个依赖项
  • ij 工具使用 url jdbc:derby:firstdb 成功连接到我的数据库(位于本地主机上,但不是“嵌入”)
  • 我找到的文档(终于!)谈到了非嵌入式模式,说驱动程序应该是 org.apache.derby.jdbc.ClientDriver,但找不到该类。我在 gihub 中找到了 liquibase 项目的注释,上面写着现在是 org.apache.derby.client.ClientAutoloadedDriver。使用该类名不会引发找不到类的错误,这似乎是向前迈进了一步。
  • 尽管加载了上述驱动程序,但上面显示的 jdbc url 失败并显示“没有适合 jdbc:derby:firstdb 的驱动程序”
  • 我发现其他注释建议 url 应该是 jdbc:derby://localhost/firstdb 的形式,但是,它说“连接被拒绝,因为找不到数据库 firstdb”。我尝试了几种命名数据库的变体,但它们再次导致“没有合适的驱动程序”。
  • 在cmets中g00se的提示下,我去寻找上面提到的ClientDriver没有找到。我在 derbytools.jar 文件中的主要 derby 发行版中发现了这一点,但在 maven 加载的任何 jar 中都没有。我尝试使用手动构建的命令行执行此操作,以便可以将 derbytools 放在类路径中。这允许将其作为驱动程序加载,但它连接到一个 in-JVM 数据库(它可以工作,我可以用它做一些事情)。但是,它没有连接到我想要实现的正在运行的网络服务器。当我尝试通过使用 jdbc:derby://localhost:1527/firstdb 形式的 URL 来强制使用它时,它再次无法告诉我找不到数据库。
  • 我还发现似乎没有必要做“Class.forName”这件事,也不必担心在类路径中有 ClientDriver。当我执行 DriverManager.getConnection 时,驱动程序以某种方式加载并可用。但是,使用我尝试过的 URL,我完全无法使其连接到网络服务器,它总是连接到 JVM 内的服务器(它可以工作,但不是我想要连接的地方。)

谁能告诉我如何让它工作?

【问题讨论】:

  • 是的,org.apache.derby.jdbc.ClientDriver。我们需要看一些代码
  • 好吧,这会抛出找不到类。在四处寻找时,我在 derby 分发目录的 derbytools.jar 文件中看到了这个类,但是什么 maven 依赖项会加载它?我目前对“derby”、“derbyclient”和“derbyshared”有依赖关系,但是在加载到具有我们正在寻找的 FQCN 的 .m2/repository 的三个 jarfile 中没有任何内容:(
  • 看起来应该使用DriverManager类加载驱动程序
  • 我正在使用 Class.forName 加载驱动程序,除了 ClientDriver 不在我能找到的任何 maven 工件中之外,它确实加载了。但正如我在上面的编辑中所指出的,它连接到 in-JVM 数据库,而不是网络服务器。我的网址有误吗?
  • 而不是通过编辑您的问题来挤入解决方案,您应该发布并接受您自己问题的答案。在 Stack Overflow 上回答您自己的问题是完全可以接受的。

标签: java jdbc derby


【解决方案1】:

(代题者发帖,将答案移至答案空间)

我现在明白了,这有效地解决了我的问题:

  • Derby 不需要您显式加载任何驱动程序,它使用服务机制来处理这个问题(服务早于 JPMS,所以是的,它可以在没有模块的情况下工作)。当然,仍然描述加载驱动程序的过时文档并没有真正的帮助。
  • 我的实际问题是我没有理解几件事,第一,derby jdbc url 的格式,第二,ij 工具可以创建嵌入式数据库。
  • 特别是我在 ij 中使用的 url(jdbc:derby:firstdb 如下所述)是一个嵌入的 url。这意味着尝试使用来自客户端代码的网络 url 连接到它是虚假的。客户端创建了自己的新数据库,但没有与 ij 交互。

希望有人能抽出时间来更新 Derby 文档,尤其是入门指南,以便从一开始就使这些关键概念更加清晰。

【讨论】:

  • 也许您可以在 Derby JIRA 上打开一个问题并将建议的补丁发布到文档中?
猜你喜欢
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 2011-12-12
  • 2013-08-12
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
相关资源
最近更新 更多