2013-04-17 62 views
5

我正在單元測試中創建一個H2數據庫。該數據庫使用以下屬性:無法瀏覽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.h2 jar文件的版本1.3.166。

當我運行我的測試時,我看到在target/db目錄中創建的數據庫,並且存在testdb.h2.db文件。我的測試運行並從數據庫加載數據。我可以打開target/db/testdb.h2.db文件並查看我用來創建數據庫的SQL語句。

但是,當我嘗試將target/db/testsb.h2.db文件加載到數據庫瀏覽工具(如DBVisualizer)中時,我看不到任何表或數據。對於DBVisualizer,我指定H2(嵌入式)模式。

我也嘗試了H2控制檯,但show tables命令返回一個空的結果集。

我看不到我在做什麼錯:數據庫文件存在,測試運行正確,但我無法在數據庫瀏覽器中打開此文件。

有什麼建議嗎?

回答

5

最有可能的問題是您使用的數據庫URL。

jdbc:h2:file:target/db/testdb 

這意味着相對於當前的工作目錄數據庫文件的存儲。所以這取決於你開始應用程序的位置。如果您在不同的目錄中啓動了DBVisualizer(這很可能是您所做的),那麼它將在另一個目錄中創建一個新的數據庫。

爲了確保您使用的是同一個數據庫,我建議使用絕對目錄名或相對於當前用戶的主目錄,作爲H2的文檔中描述:

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

前綴file:是可選。

+4

其實問題是我如何在DBVisualizer中指定文件。它詢問一個數據庫文件,並打開一個文件選擇器對話框,我自然地雙擊了'target/db/testdb.h2.db'文件。但正確的方法是刪除'.h2.db'擴展名。糟糕的UI設計恕我直言。 –

+1

我認爲在H2的下一個市長版本(2.0也許)中將沒有硬編碼的文件名後綴。 –

+1

@JohnQCitizen你贏了我所有的互聯網一週!這是問題。我正在使用數據庫遷移,並無法弄清楚爲什麼表沒有創建。原來,刪除.h2.db沒有辦法。使用ui失敗!並感謝解決方案! – Maik

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文件,你應該是好去。

相關問題