2013-09-20 2 views
1

Итак, у меня есть приложение, и он использует базу данных, теперь мне нужно использовать встроенную базу данных внутри приложения, так что все, что вы делаете с ней, - это установка программы и базы данных (так что клиенту не нужно устанавливать копию сервера mysql, wamp, xampp и т. д. для запуска базы данных mysql) со всей информацией.H2 Встроенная база данных теряет таблицы/данные при развертывании

У меня есть приложение для экспорта в файл jar, который затем отлично вложен в exe-файл и работает на моем компьютере, но когда я копирую его на другой компьютер и запускаю его, база данных есть, но данные таблицы и таблицы, которые я вставляю, исчезли. Что я делаю не так?

Заранее благодарен

+1

похоже, что вы случайно перезапустили базу данных. Возможно, этот SO-поток даст некоторое представление: http://stackoverflow.com/questions/15870168/what-is-wiping-my-h2-database-every-time-i-run-a-unit-test – SnakeDoc

+0

Проверьте путь к файлам базы данных, как показано [здесь] (http://stackoverflow.com/a/2443685/230513). – trashgod

+1

Если база данных встроена в вашу прикладную банку, она не будет доступна для записи – MadProgrammer

ответ

0

Существует несколько вариантов. Одним из вариантов являются:

  • Создайте файл SQL скрипта из текущей базы данных с помощью SQL заявления SCRIPT TO '~/script.sql'
  • Скопируйте файл script.sql из вашей домашней директории пользователя в исходном каталог приложения, так что вы можете связать его как ресурс. Используйте корневой каталог исходного кода приложения (потому что это самое простое решение).
  • На целевом компьютере используйте URL-адрес базы данных jdbc:h2:~/data;INIT=runscript from 'classpath:script.sql'. Это откроет базу данных и запустит скрипт. Он прочитает сценарий как ресурс.

Есть и другие варианты, но они требуют, чтобы вы read the documentation of the H2 database.

0

Рассмотрев аналогичную проблему (используя экспортированную базу данных в H2), я нашел ответ выше полезного, но не смог заставить SCRIPT TO работать. Моя база данных - mySQL. Пути экспортировать Термическую базу данных в виде сценария, который работал для меня был из Linux оболочки:

mysqldump -u[user] [databasename] > exportscriptfile.sql 

мне пришлось тогда сделать некоторую полируя работу над сценарием, так что H2 может читать (см похожего материала на this SO thread)

Вот мои рабочие конфигурации на основе java, основанные на jdbc EmbeddedDatabaseBuilder. Источник данных, созданный как bean-компонент здесь, может использоваться в любых вызовах jdbc:

@Configuration 
public class H2DBConfig { 

@Bean 
public DataSource dataSource() { 
    return new EmbeddedDatabaseBuilder() 
     .setType(EmbeddedDatabaseType.H2) 
     .addScript("classpath:exportscriptfile.sql") 
     .build(); 
} 
Смежные вопросы