以下具有“内存模式”的 H2 数据库代码运行良好,直到连接打开或 VM 正在运行。但是当连接关闭或虚拟机关闭时,H2 db 会丢失数据。有没有其他方法可以在多个启动-关闭/在线-离线周期中保存数据?
一种方法是通过跟踪从应用程序发出的 DDL 和 DML 以及在后台检查磁盘和内存上数据的完整性的同步过程来创建内存数据库的基于磁盘的副本。基于磁盘的 DML 可能会更慢 + 每次启动时将磁盘数据复制/加载到内存的额外开销会存在,但在某种程度上仍然可以实现持久性。
H2 是否提供了其他方法来解决内存模式或任何其他解决方法的持久性问题?
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class H2InMemoryModeTest {
public static void main(String[] args)
{
try
{
Class.forName("org.h2.Driver");
DriverManager.getConnection("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1","sa","sa");
Statement stmt = con.createStatement();
//stmt.executeUpdate( "DROP TABLE table1" );
stmt.executeUpdate( "CREATE TABLE table1 ( user varchar(50) )" );
stmt.executeUpdate( "INSERT INTO table1 ( user ) VALUES ( 'John' )" );
stmt.executeUpdate( "INSERT INTO table1 ( user ) VALUES ( 'Smith' )" );
ResultSet rs = stmt.executeQuery("SELECT * FROM table1");
while( rs.next() )
{
String name = rs.getString("user");
System.out.println( name );
}
stmt.close();
con.close();
}
catch( Exception e )
{
System.out.println( e.getMessage() );
}
}
}
请帮助。谢谢。