2015-10-06 112 views
0

我有一個mydata.properties和mydata.script形式的HSQLDB 1.8。在mydata.script中,有一些基本的SQL語句來創建模式並填充數據庫。hsqldb * .script.new創建和刪除

當我使用一個標準的Java JDBC調用來加載這個數據庫,我注意到,在文件系統中,以下看似發生了:正在創建

  1. 的文件mydata.script.new。
  2. 文件mydata.script被刪除。
  3. mydata.script.new更名爲mydata.script

如何防止被刪除mydata.script?這是正常的HSQLDB行爲?

我希望mydata.script在文件系統中始終保持(使用它的時間戳),它的意思是作爲只讀數據源。

編輯:manual確實聲明這是附錄C中的默認行爲。在我的使用案例中,多個程序(不僅是Java)讀取此數據庫。如果一個程序第一次嘗試讀取.script文件,而第一次訪問另一個程序時,它將被刪除,這會導致錯誤。

編輯2:如果上述確實不可能,是否沒有辦法將此mydata.script(包含所有SQL調用)轉換爲剛剛通過JDBC加載並且未修改的某些二進制HSQLDB blob格式?

+0

所以,你想用這個HSQLDB數據庫作爲多應用的持續只讀資源,有些沒有在Java中實現,這可能嘗試訪問數據庫同時。那是對的嗎? –

+0

這是正確的。這個只讀的HSQLDB文件/數據需要在文件系統中始終存在。 – tkja

回答

0

我找到了我的問題的答案:有一個modified屬性,當設置爲no在HSQLDB .properties文件中將阻止在我的問題中觀察到的行爲。

1

根據您的使用情況,HSQLDB可能不是正確的工具。

聽起來好像你想從多個應用程序訪問數據庫進程內,但HSQLDB不支持。從Deployment Guide的「管理數據庫連接」部分:

在所有運行模式(服務器或進程)數據庫引擎的多個連接的支持。 進程(獨立)模式在同一個Java虛擬機客戶端支持,

所以,如果你想從你應該在「服務器」模式下使用HSQLDB單獨處理多個併發連接,但你可能不想被這個困擾。

此外,HSQLDB與Java緊密結合,因此如果您有非Java應用程序需要訪問數據,那麼您可能會讓生活變得比需要的難度更大。

另一種數據庫格式,可能是SQLite,可能對你更好。

1

您可以從多個進程同時訪問只讀HSQLDB數據庫。加入這一行屬性文件,以只讀數據庫:

readonly=yes