Следующий код для базы данных H2 с режимом в памяти работает отлично, пока соединение не открыто или не запущена виртуальная машина. Но 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() );
}
}
}
Пожалуйста, помогите. Спасибо.
SCRIPT TO
? - person Thomas Mueller   schedule 10.08.2013