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 в конце