2015-10-06 4 views
0

У меня есть HSQLDB 1.8 в виде mydata.properties и mydata.script. В mydata.script существуют некоторые базовые инструкции SQL для создания схемы и заполнения db.hsqldb * .script.new создание и удаление

Когда я использую стандартный вызов Java JDBC, чтобы загрузить эту базу данных, я заметил, что в файловой системе, следующий, казалось бы, происходит:

  1. Файл mydata.script.new создается.
  2. Файл mydata.script удален.
  3. mydata.script.new переименован в mydata.script

Как я могу предотвратить mydata.script от удаления? Является ли это обычным поведением HSQLDB?

Я хочу, чтобы mydata.script постоянно сохранялся (со своей меткой времени) в файловой системе, он предназначен как источник данных только для чтения.

EDIT: manual указывает, что это поведение по умолчанию в Приложении C. В моем случае использование нескольких программ (а не только Java) читает этот db. Если программа пытается прочитать файл .script в первый раз, только когда она удаляется из-за первого доступа к другой программе, это вызовет ошибки.

EDIT2: Если выше действительно невозможно, не существует способа превратить этот mydata.script (содержащий все вызовы SQL) в какой-то двоичный формат blask HSQLDB, который просто загружается через JDBC и не изменяется?

+0

Так что вы хотите использовать эту базу данных HSQLDB в качестве постоянного ресурса только для чтения нескольких приложений, некоторые из них не реализованы в Java, которые могут попытаться получить доступ к базы данных одновременно. Это верно? –

+0

Это правильно. Необходимо, чтобы этот файл/данные HSQLDB только для чтения просто существовал всегда в файловой системе. – tkja

ответ

0

Я нашел ответ на свой вопрос: есть атрибут modified, который при установке в no файла HSQLDB .properties предотвратит поведение, наблюдаемое в моем вопросе.

1

Основываясь на вашем примере использования, HSQLDB, вероятно, не подходит для работы.

Похоже, вы хотите получить доступ к базе данных в процессе из нескольких приложений, но HSQLDB не поддерживает это. В разделе «Управление подключений баз данных» из Deployment Guide:

Во всех режимах работают (сервер или в процессе) несколько соединений к двигателю базы данных поддерживаются. в процессе режим (автономный) поддерживает соединения с клиентом в одной и той же виртуальной машины Java,

Итак, если вы хотите, чтобы несколько одновременных соединений из отдельных процессов вы должны использовать HSQLDB в режиме «сервера», но вы, вероятно, не хотите беспокоиться об этом.

Кроме того, HSQLDB тесно связан с Java, поэтому, если у вас есть приложения, отличные от Java, которые хотят получить доступ к данным, которые вы, вероятно, делаете вашу жизнь труднее, чем она должна быть.

Другой формат базы данных, возможно, SQLite, может работать лучше для вас.

1

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

readonly=yes 
Смежные вопросы