为啥我在尝试通过“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 创建数据库时收到错误消息的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在尝试访问“$comment->users->username”时收到“尝试获取非对象的属性 'username'”?