在連接之間保持 H2 記憶體數據庫
我在 Java 中使用以下程式碼創建並使用 H2 記憶體數據庫(不寫入儲存)進行展示和快速測試:
Connection conn = DriverManager.getConnection( "jdbc:h2:mem:example_db" ) ;
這是第一次工作,但隨後數據庫似乎消失了,無法進行進一步的工作。隨著時間的推移,如何使用相同的記憶體數據庫?
放
DB_CLOSE_DELAY=-1
預設情況下,H2 中的記憶體數據庫在連接關閉後被丟棄。
要覆蓋此預設行為,請**設置
DB_CLOSE_DELAY
為負值。**您可以這樣做:
- 與 JDBC 路徑建立連接時
- 通過呼叫 SQL 命令
JDBC 路徑
要在連接關閉的情況下保持數據庫存在,請在 JDBC 路徑中添加一個元素。數據庫將繼續存在於記憶體中,直到您的應用程序退出。因此,您可以連續連接到同一個連續數據庫。
提示:注意數據庫名稱和此元素之間的分號(不是冒號)。
Connection conn = DriverManager.getConnection( "jdbc:h2:mem:example_db;DB_CLOSE_DELAY=-1" // Set `DB_CLOSE_DELAY` to `-1` to keep in-memory database in existence after connection closes. ) ;
如果要顯式呼叫預設行為,請設置
0
. 在最後一個連接關閉後丟棄數據庫之前的幾秒鐘內,傳遞一個正整數 ( >=1 )。此功能在手冊最後一段的記憶體數據庫部分中進行了介紹。
預設情況下,關閉與數據庫的最後一個連接會關閉數據庫。對於記憶體數據庫,這意味著內容失去。要保持數據庫打開,請將 ;DB_CLOSE_DELAY=-1 添加到數據庫 URL。要在虛擬機處於活動狀態時保留記憶體數據庫的內容,請使用 jdbc:h2:mem:test;DB_CLOSE_DELAY=-1。
SQL 命令
此設置也可以在執行時通過
SET DB_CLOSE_DELAY
命令進行操作,傳遞一個整數。引用該文件:
SET DB_CLOSE_DELAY 整數
如果所有連接都關閉,則設置關閉數據庫的延遲。該值
-1
意味著數據庫永遠不會關閉,直到關閉延遲設置為其他值或被SHUTDOWN
呼叫。該值0
表示無延遲(預設值;如果與數據庫的最後一個連接關閉,則數據庫將關閉)。值1
和更大的值表示關閉最後一個連接後數據庫保持打開狀態的秒數。如果應用程序正常退出或呼叫 System.exit,則數據庫會立即關閉,即使設置了延遲也是如此。
執行此命令需要管理員權限,因為它會影響所有連接。此命令在此連接中送出一個打開的事務。此設置是持久的。可以將此設置附加到數據庫 URL:
jdbc:h2:test;DB_CLOSE_DELAY=-1
例子:
SET DB_CLOSE_DELAY -1