小编典典

H2 内存数据库。找不到表

all

我有一个带有 URL 的 H2 数据库"jdbc:h2:test"。我使用CREATE TABLE PERSON (ID INT PRIMARY KEY, FIRSTNAME VARCHAR(64), LASTNAME VARCHAR(64));. 然后我使用SELECT * FROM PERSON. 到目前为止,一切都很好。

但是,如果我将 URL
更改为"jdbc:h2:mem:test",唯一的区别是数据库现在只在内存中,这给了我一个org.h2.jdbc.JdbcSQLException: Table "PERSON" not found; SQL statement: SELECT * FROM PERSON [42102-154].
我可能在这里遗漏了一些简单的东西,但我们将不胜感激。


阅读 68

收藏
2022-06-15

共1个答案

小编典典

DB_CLOSE_DELAY=-1

hbm2ddl 在创建表后关闭连接,因此 h2 将其丢弃。

如果您的连接网址配置如下

jdbc:h2:mem:test

数据库的内容在最后一个连接关闭时丢失。

如果你想保留你的内容,你必须像这样配置 url

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

如果这样做,只要 vm存在,* h2 就会保留其内容。 *

注意分号 ( ;) 而不是冒号 ( :)。

请参阅 功能 页面
的内存数据库

部分。去引用: __

默认情况下,关闭与数据库的最后一个连接会关闭数据库。对于内存数据库,这意味着内容丢失。要保持数据库打开,请添加;DB_CLOSE_DELAY=-1到数据库
URL。只要虚拟机处于活动状态,要保留内存数据库的内容,请使用jdbc:h2:mem:test;DB_CLOSE_DELAY=-1.

2022-06-15