h2 (встроенный режим) проблема с файлами базы данных - PullRequest
15 голосов
/ 14 марта 2010

В моем каталоге src есть файл h2-базы данных (Java, Eclipse): h2test.db

Проблема:

  • запуская h2.jar из командной строки (и, следовательно, интерфейса браузера h2 на порту 8082), я создал 2 таблицы, 'test1' и 'test2' в h2test.db, и я поместил некоторые данные в них;

  • при попытке получить к ним доступ из кода Java (JDBC) выдает «исключение для таблицы не найдено». «Показать таблицы» из кода Java показывает результирующий набор с 0 строками.

  • Кроме того, при создании новой таблицы ('newtest') из кода Java (CREATE TABLE ... и т. Д.) Я не вижу ее при последующем запуске интерфейса браузера h2.jar; показаны только две другие таблицы («test1» и «test2») (но затем вновь созданная таблица «newtest» доступна из кода Java).

Я неопытный со встроенными базами данных; Я считаю, что я делаю что-то в корне неправильно здесь. Я предполагаю, что я получаю доступ к одному и тому же файлу - один раз из Java-приложения и один раз из интерфейса консоли браузера h2. Кажется, я не могу понять, что я здесь делаю не так?

РЕДАКТИРОВАТЬ: по запросу, добавив код:

Java-код:

Class.forName("org.h2.Driver");
String url = "jdbc:h2:" + "db/h2test.db";
String user = "aeter"; 
String password = "aeter"; 
Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement ps2 = conn.prepareStatement("Show tables;");
ResultSet rs = ps2.executeQuery();

Этот набор результатов содержит 0 строк (без таблиц) вместо двух таблиц.

Настройки интерфейса консоли H2:

Settings: Generic h2(embedded)
driver class: org.h2.Driver
JDBC URL: jdbc:h2:../../workspace/project_name/src/db/h2test.db
user name: aeter
password: aeter 

EDIT2: я скопировал базу данных в новую папку. Теперь файл db в новой папке отображается с таблицей 'newtest' (из кода java) и с таблицами 'test1' и 'test2' (из интерфейса h2 консоль-браузер) - точно так же, как старый db файл был показан. Таким образом, проблема сохраняется с копией файла базы данных.

Ответы [ 4 ]

15 голосов
/ 14 марта 2010

Для встроенного режима вам необходимо проверить путь. Например, используйте путь относительно вашего домашнего каталога:

"jdbc:h2:file:~/db/h2test.db"

Чтобы быть уверенным, используйте полный путь:

"jdbc:h2:file:/users/aeter/db/h2test.db"

Для удобства добавьте ;IFEXISTS=TRUE, чтобы избежать создания поддельных файлов базы данных.

Подробнее см. Подключение к базе данных с использованием JDBC .

H2 Сервер URL-адреса относятся к -baseDir, указанному в качестве параметра main().

3 голосов
/ 15 июля 2015

Также может возникнуть проблема, если вы используете некоторые специальные параметры в своем URL JDBC, имя файла базы данных может отличаться для разных случаев.

В моем случае у меня было два URL:

  • JDBC: h2: ~ / XXX; MVCC = FALSE; MV_STORE = FALSE
  • JDBC: h2: ~ / XXX

В этом первом случае был создан файл XXX.h2.db, во втором - XXX.mv.db, будьте осторожны.

1 голос
/ 18 июня 2015

Если вы используете Hibernate, попробуйте это в файле hibernate.cfg.xml:

<property name="connection.url">jdbc:h2:file:db/h2test</property>

без расширения * .db в конце

1 голос
/ 27 ноября 2014

Также вам может понравиться это

"jdbc:h2:file:db/h2test.db"

тогда java ищет папку db из папки проекта

->projectName // project folder
-->src        // src folder
-->db         // here your database folder
-->....
...