H2 内存中数据库。未找到表DB_CLOSE_DELAY=-1

2022-08-31 05:55:52

我有一个带有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]


答案 1

DB_CLOSE_DELAY=-1

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

如果您的连接 URL 配置如下

jdbc:h2:mem:test

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

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

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

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

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

请参阅“功能”页的“内存中数据库”部分。引用:

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


答案 2

我知道这不是你的情况,但我遇到了同样的问题,因为H2正在创建具有大写名称的表,然后表现为区分大小写,即使在所有脚本(包括创建脚本中)我都使用小写字母。

通过添加到连接 URL 解决。;DATABASE_TO_UPPER=false


推荐