为啥我在尝试通过“jdbc:h2:test”的 URL 创建数据库时收到错误消息

Posted

技术标签:

【中文标题】为啥我在尝试通过“jdbc:h2:test”的 URL 创建数据库时收到错误消息【英文标题】:Why am I receiving an error when trying to create the database by the URL of "jdbc:h2:test"为什么我在尝试通过“jdbc:h2:test”的 URL 创建数据库时收到错误消息 【发布时间】:2014-11-03 21:53:38 【问题描述】:

我正在尝试使用“jdbc:h2:test:”的 URL 创建一个数据库,如 H2 的网站 (here) 上的“数据库文件存储在哪里?”。它指出“如果基础目录未设置(如 jdbc:h2:test),数据库文件存储在应用程序启动的目录(当前工作目录)中。”,这正是我想要的。

我收到错误消息“数据库 URL “jdbc:h2:test”中不允许隐式相对于当前工作目录的文件路径。请使用绝对路径、~/name、./name 或baseDir 设置。[90011-182] 90011/90011"。

这个错误是什么意思?为什么我不能使用 H2 网站告诉我使用的 URL 创建数据库?

提前感谢您提供任何有用的答案。

问候,

瑞安·舒基斯

【问题讨论】:

【参考方案1】:

答案在H2 Error documentation。这是一个很好的做法 - 特别是在处理容易出现隐蔽错误的 RDBMS 时,请在其手册中查找错误号。

本质上,默认情况下不允许这样做,以防止混淆。您可以设置一个系统选项来禁用检查,或者您可以使用明确的相对路径 (./test)。

【讨论】:

./test”有什么作用?如果您指的是创建绝对路径,这对我没有好处。我需要将数据库存储在可以通过共享位置访问的位置,并且我需要应用程序知道该位置是什么,而不必在每次运行应用程序时都提示用户输入。 这是一个显式相对路径,正如我(和文档)所说。这 ”。”是从 Unix 借来的约定,意思是“当前目录”。所以它的意思是*current_directory*/test 好的,明白了。那么,这会将数据库存储在与 Java 文件相同的目录中,对吗? 当前工作目录(通常)是启动进程的目录。所以这取决于你如何启动进程(你可以使用java -cp ...从任何目录启动它)。 @Ryan - 实际上不。使用“jdbc:h2:test”也不会这样做。当前工作目录是调用java 命令时用户所在的目录。【参考方案2】:

我建议尝试使用jdbc:h2:file:C:/data/test URL,并将路径设为应用程序文件夹的显式路径。 (如您当前 URL 来自的同一段的末尾所示)。

它抱怨相对路径不可行,所以给它一个绝对路径。

【讨论】:

正如我在另一条评论中所说,创建绝对路径对我没有好处。我需要将数据库存储在可以通过共享位置访问的位置,并且我需要应用程序知道该位置是什么,而不必在每次运行应用程序时都提示用户输入。 为什么必须有“C:”?不能像现有的所有其他 Java 应用程序一样将“/data/test”转换为“C:/data/test”吗?这是基本的核心库功能。它使混合计算机开发环境变得混乱。

以上是关于为啥我在尝试通过“jdbc:h2:test”的 URL 创建数据库时收到错误消息的主要内容,如果未能解决你的问题,请参考以下文章

h2Database 的默认详细信息

通过java将数据输入H2数据库时出现SQL异常

在 sql2o 中插入时出错

为啥我在尝试访问“$comment->users->username”时收到“尝试获取非对象的属性 'username'”?

为啥我在尝试通过 Matlab ftp 访问 Box 时收到“连接被拒绝”?

为啥我在创建 React 应用程序时出错?