Bas*_*que 5 jdbc java h2 in-memory-database connections
我使用 Java 中的以下代码创建并使用内存中的 H2 数据库(不写入存储)进行演示和快速测试:
Connection conn = DriverManager.getConnection( "jdbc:h2:mem:example_db" ) ;
Run Code Online (Sandbox Code Playgroud)
这第一次有效,但随后数据库似乎消失了,无法进行进一步的工作。如何随着时间的推移使用相同的内存数据库?
DB_CLOSE_DELAY=-1
默认情况下,H2 中的内存数据库在连接关闭后将被丢弃。
要覆盖此默认行为,请设置DB_CLOSE_DELAY
为负值。您可以这样做:
要在连接关闭时保持数据库存在,请向 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.
)
;
Run Code Online (Sandbox Code Playgroud)
如果您想显式调用默认行为,请设置0
。在最后一个连接关闭后丢弃数据库之前的几秒内,传递一个正整数 ( >=1 )。
手册最后一段中内存数据库部分介绍了此功能。
默认情况下,关闭最后一个数据库连接将关闭数据库。对于内存数据库来说,这意味着内容丢失。要保持数据库打开,请将 ;DB_CLOSE_DELAY=-1 添加到数据库 URL。要在虚拟机处于活动状态时保留内存数据库的内容,请使用 jdbc:h2:mem:test;DB_CLOSE_DELAY=-1。
还可以在运行时通过SET DB_CLOSE_DELAY
命令传递一个整数来操作此设置。
引用该文档:
设置 DB_CLOSE_DELAY int
设置所有连接都关闭时关闭数据库的延迟。该值
-1
意味着数据库永远不会关闭,直到关闭延迟设置为其他值或被SHUTDOWN
调用。该值0
表示没有延迟(默认值;如果数据库的最后一个连接关闭,则数据库将关闭)。值1
及更大值表示关闭最后一个连接后数据库保持打开状态的秒数。如果应用程序正常退出或调用 System.exit,即使设置了延迟,数据库也会立即关闭。
执行此命令需要管理员权限,因为它会影响所有连接。该命令在此连接中提交一个打开的事务。此设置是持久的。可以将此设置附加到数据库 URL:
jdbc:h2:test;DB_CLOSE_DELAY=-1
例子:
SET DB_CLOSE_DELAY -1
归档时间: |
|
查看次数: |
10728 次 |
最近记录: |