1. ホーム

[解決済み】H2インメモリデータベース。テーブルが見つからない

2022-04-17 06:58:58

質問

H2データベースで、URLは "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] . 私はおそらくここで何か簡単なことを見逃している、しかし、任意のヘルプは感謝されます。

解決方法は?

DB_CLOSE_DELAY=-1

hbm2ddl はテーブルを作成した後、接続を閉じるので、h2 はそれを破棄します。

このようにconnection-urlが設定されている場合

jdbc:h2:mem:test

の場合、最後の接続を閉じた瞬間にデータベースの内容が失われます。

コンテンツを保持したい場合は、次のようにURLを設定する必要があります。

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

そうする場合。 h2 を指定すると、そのコンテンツは vm が生きている。

セミコロンに注目してください ( ; ではなく、コロン ( : ).

をご覧ください。 インメモリデータベース セクションの 特徴 のページをご覧ください。引用すると

デフォルトでは、データベースへの最後の接続を閉じると、データベースが閉じられます。インメモリデータベースの場合、これはコンテンツが失われることを意味します。データベースを開いたままにしておくには ;DB_CLOSE_DELAY=-1 をデータベースURLに追加してください。仮想マシンが生きている限り、インメモリデータベースのコンテンツを保持するには、以下のようにします。 jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 .