有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

derby 10.15.2.0的java JDBC驱动程序?

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

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

然而,当我试图用实际的Java代码连接到这个程序时,事情就糟了。在这种情况下,我尝试了几种方法,但每种方法都有不同的失败,所以我希望大家都能原谅这种模糊的做法。但这些是我迄今为止尝试/失败的关键点

  • 这是一个maven项目,对artifactId“derbyclient”版本10.15.2.0有一个依赖关系
  • ij工具使用url jdbc:derby:firstdb成功地连接到我的数据库(该数据库位于本地主机上,但未“嵌入”)
  • 我找到的文档(终于!)这在某种程度上谈到了非嵌入式模式,即驱动程序应该是org。阿帕奇。德比。jdbc。ClientDriver,但找不到该类。我在gihub中找到了liquibase项目的注释,上面说现在是org。阿帕奇。德比。客户ClientAutoloadedDriver。使用该类名,不会抛出类not found错误,这似乎是向前迈出的一步
  • 虽然加载了上述驱动程序,但上面显示的JDBCURL失败,并显示“没有适合jdbc的驱动程序:derby:firstdb”
  • 我发现了其他提示,建议url的格式应为jdbc:derby://localhost/firstdb但是,这表示“连接被拒绝,因为找不到数据库firstdb”。我尝试了几种命名db的变体,但它们再次导致“没有合适的驱动程序”
  • 在评论中g00se的提示下,我去寻找上面提到的没有找到的ClientDriver。我在derbytools文件的主derby发行版中发现了这一点。jar,但不在maven加载的任何jar中。我尝试使用一个手工构建的命令行来执行它,以便将derbytools放在类路径上。这允许将其作为驱动程序加载,但它连接到JVM中的数据库(这是可行的,我可以用它做一些事情)。但是,它没有连接到正在运行的网络服务器,这正是我想要实现的。当我试图通过使用jdbc格式的URL来强制它:derby://localhost:1527/firstdb,它再次告诉我找不到数据库时失败
  • 我还发现似乎没有必要做“Class.forName”之类的事情,也不必担心类路径上有ClientDriver。当我使用DriverManager时,驱动程序已加载并可用。获取连接。然而,使用我尝试过的URL,我完全无法让它连接到网络服务器,它总是连接到JVM中的服务器(它可以工作,但不是我想要连接的地方)

有人能告诉我如何让它工作吗


共 (1) 个答案

  1. # 1 楼答案

    (代表问题作者发布,将解决方案移至答案空间)

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

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

    祈祷有人能抽出时间更新Derby文档,尤其是《入门指南》,让这些关键概念从一开始就更加清晰