hsql вопрос о сохраняемых данных - PullRequest
1 голос
/ 16 июня 2011

Я смотрю на HSQL (для встраивания в приложение) и ожидал, что данные будут сохранены в файле myDB.data в файловой системе
Вместо этого после чистого выключения (выполнить sql «shutdown», stop и shutdown server object) единственными оставшимися файлами являются myDB.properties и myDB.script, а myDB.script имеет все команды для воссоздания данных в памяти. Файл myDB.data не существует
Например. из myDB.script

CREATE MEMORY TABLE PUBLIC.DUMMYTABLE(ID INTEGER PRIMARY KEY,FIRSTNAME VARCHAR(20))

Из myDB.properties:

version=2.2.4
modified=no

Я думал, что использую файл дБ, а не память дБ.

Class.forName("org.hsqldb.jdbc.JDBCDriver");

HsqlProperties p = new HsqlProperties();  
p.setProperty("server.database.0", "file:./testDB");  
p.setProperty("server.dbname.0","myDB");  
p.setProperty("server.address","localhost");  
Server server = new Server(); server.setProperties(p);  
server.start();  
Connection connection = DriverManager.getConnection"jdbc:hsqldb:hsql://localhost:9001/myDB", "SA", "");    
PreparedStatement st = connection.prepareStatement("CREATE TABLE dummyTable (id INTEGER PRIMARY KEY, firstname VARCHAR(20))");    
st.executeUpdate();   
connection.prepareStatement("shutdown").execute();  
connection.close();  
server.stop();  
server.shutdown();

Ответы [ 3 ]

6 голосов
/ 16 июня 2011

Если вы используете базу данных file:, HSQLDB должен создать для вашей базы данных .script и .properties (и, возможно, .log в случае неожиданного завершения работы), и эти файлы не будут удалены, если приложениевыключенФайл .script должен содержать все операторы INSERT, необходимые для повторного заполнения ваших данных.

Если вы используете базу данных mem:, файлы не будут записываться вообще, и данные не будут сохраняться междуэкземпляров.Из руководства :

Поскольку на диск не записывается информация, этот режим следует использовать только для внутренней обработки данных приложения, в апплетах или некоторых специальных приложениях.Этот режим определяется протоколом mem:.

Тот факт, что файлы существуют и остаются между перезапусками приложения, сам по себе является "файловой" базой данных, которую вы ищете.

Редактировать:

Чтобы ответить на ваш комментарий,

Но в этом случае используется файл * .data, о котором в руководстве упоминается

Из руководства :

Этот файл содержит (двоичные) записи данных только для таблиц CACHED.

См. ответ лошади для получения информации о таблицах CACHED vs MEMORY.Что касается ваших вопросов о том, когда вы будете использовать таблицы CACHED, вот еще один фрагмент из руководства:

В памяти содержится только часть их данных или индексов, что позволяет использовать большие таблицы, которыев противном случае заняло бы до нескольких сотен мегабайт памяти.Другое преимущество кэшируемых таблиц состоит в том, что ядру базы данных требуется меньше времени для запуска, когда кэшированная таблица используется для больших объемов данных.Недостатком кэшируемых таблиц является снижение скорости.Не используйте кэшированные таблицы, если ваш набор данных относительно мал.В приложении с несколькими небольшими и большими таблицами лучше использовать режим MEMORY по умолчанию для небольших таблиц.

4 голосов
/ 16 июня 2011

Нет, это прекрасно.

Таблица памяти - это таблица, которая полностью загружается в память при запуске и сохраняется в файле .script при завершении работы.

Если вы не хотите хранить все данные в памяти, вам нужно создать таблицу CACHED, которая в основном хранится на диске.Только части считываются в память.

По умолчанию используется «ПАМЯТЬ», если вы не указали тип таблицы при ее создании.http://hsqldb.org/doc/2.0/guide/sqlgeneral-chapt.html#sqlgeneral_tabletypes-sect#N1039D

Вы также можете установить тип таблицы по умолчанию (память, кэшированный) в файле .properties, чтобы при выполнении команды CREATE TABLE без указания типа был создан этот тип по умолчанию.

Снова это объясняется в руководстве:http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#N14DEE

1 голос
/ 11 ноября 2012

HSQL 2.2.5 имеет некоторые проблемы. Используйте hsqldb.jar из lib базы данных HSQL версии 2.2.9 В конце вашей программы напишите утверждение

org.hsqldb.DatabaseManager.closeDatabases(0);

Это должно сохранить ваши изменения в файле.

...