5

単体テストで H2 データベースを作成しています。データベースは次のプロパティを使用します。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close">
  <property name="driverClassName" value="org.h2.Driver"/>
  <property name="url" value="jdbc:h2:file:target/db/testdb"/>
  <property name="username" value="sa"/>
  <property name="password" value=""/>
</bean>

com.h2database.h2jar ファイルのバージョン 1.3.166 を使用しています。

テストを実行すると、データベースがtarget/dbディレクトリに作成され、testdb.h2.dbファイルが存在することがわかります。テストが実行され、データベースからデータがロードされます。ファイルを開くtarget/db/testdb.h2.dbと、データベースの作成に使用した SQL ステートメントが表示されます。

しかし、target/db/testsb.h2.dbDBVisualizer などのデータベース参照ツールにファイルをロードしようとすると、テーブルやデータが表示されません。DBVisualizer には H2(Embedded) モードを指定します。

H2 コンソールも試しましたが、show tablesコマンドは空の結果セットを返します。

データベース ファイルが存在し、それに対してテストが正しく実行されますが、データベース ブラウザでこのファイルを開くことができません。

助言がありますか?

4

2 に答える 2

6

ほとんどの場合、問題は使用しているデータベース URL にあります。

jdbc:h2:file:target/db/testdb

これは、データベース ファイルが現在の作業ディレクトリに対して相対的に保存されることを意味します。したがって、アプリケーションをどこで開始したかによって異なります。別のディレクトリで DBVisualizer を起動した場合 (おそらくそうです)、別のディレクトリに新しいデータベースが作成されます。

同じデータベースを使用していることを確認するには、H2 のドキュメントで説明されているように、絶対ディレクトリ名を使用するか、現在のユーザーのホーム ディレクトリからの相対名を使用することをお勧めします。

jdbc:h2:~/relative/to/user/home/dir/testdb
jdbc:h2:/absolute/path/testdb

プレフィックスfile:はオプションです。

于 2013-04-20T15:11:50.387 に答える
0

次のようなエラーが発生した場合

Unsupported database file version or invalid file header in file "Old database:
/path/to/databasename.data.db - please convert the database to a SQL script and 
re-create it." [90048-167]

問題は (メッセージにあるように) 古いバージョンの h2 で作成されたデータベースを使用していることです。dbVisualizer でデータベースを参照するために、新しいデータベース ドライバーを作成できます。

Tools> Driver manager...>Create a new driver

フィールドに入力し、適切な h2 jar ファイルを選択すると、準備完了です。

于 2013-09-12T14:45:02.987 に答える