H2 (встроенный режим) проблема с файлами базы данных

В моем каталоге src (Java, Eclipse) есть файл h2-database: 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. Кажется, я не понимаю, что я здесь делаю неправильно?

EDIT: в соответствии с запросом, добавив некоторый код:

Код 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 строк (без таблиц), вместо того, чтобы показывать мне 2 таблицы.

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 файл был показан. Поэтому проблема сохраняется с копией файла db.

Ответы

Ответ 1

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

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

Конечно, используйте полный путь:

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

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

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

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

Ответ 2

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

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

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

Этот первый случай создал файл XXX.h2.db, второй - XXX.mv.db, остерегайтесь.

Ответ 3

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

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

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

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

Ответ 4

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

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

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