Как подключиться к HSQL, который Spring создает при использовании jdbc:embedded-database?

У меня есть база данных HSQL, которую Spring автоматически создает для меня:

<jdbc:embedded-database id="dataSource" type="HSQL">
    <jdbc:script location="classpath:scheme.sql" /
</jdbc:embedded-database>

И теперь я хочу подключиться к этой базе данных. Мой вопрос в том, как это сделать, потому что я не знаю, какой адрес мне следует использовать.


person Slava Semushin    schedule 16.01.2012    source источник
comment
Что вы имеете в виду под подключением? Вы хотите использовать его в своем spring bean или хотите подключиться к внешнему браузеру базы данных?   -  person Piotr Gwiazda    schedule 16.01.2012
comment
@peter-gwiazda Я имею в виду, как подключиться к нему с помощью браузера внешней базы данных.   -  person Slava Semushin    schedule 17.01.2012
comment
Запустите HSQLDB в режиме сервера. Вы также можете проверить базу данных H2.   -  person Piotr Gwiazda    schedule 17.01.2012
comment
roytuts.com/embedded-hsql-database-with-spring/   -  person user3470953    schedule 01.06.2015


Ответы (6)


Эта встроенная база данных HSQL находится в памяти и находится в процессе, поэтому доступна только из процесса Spring Java. Если вы хотите получить доступ к базе данных и из другого инструмента, например, чтобы проверить содержимое с помощью менеджера баз данных, вы можете запустить сервер HSQLDB с экземпляром all-in-memory, а затем подключиться к серверу из Spring и других инструментов.

Это описано в руководстве по HSQLDB http://hsqldb.org/doc/2.0/guide/listeners-chapt.html

Сервер запускается этой командой:

java -cp ../lib/hsqldb.jar org.hsqldb.Server --database.0 mem:test --dbname.0 test

Вам необходимо создать источник данных Spring с именем пользователя «SA» и паролем «». Драйвер базы данных и URL-адрес (с того же компьютера) для настройки источника данных Spring:

org.hsqldb.jdbcDriver
jdbc:hsqldb:hsql://localhost/test
person fredt    schedule 16.01.2012
comment
Когда я запускаю java -cp ~/.m2/repository/org/hsqldb/hsqldb/2.0.0/hsqldb-2.0.0.jar org.hsqldb.util.DatabaseManagerSwing и использую jdbc:hsqldb:hsql://localhost/test, у меня возникает ошибка: java.sql.SQLTransientConnectionException: java.net.ConnextException: Connection refused - person Slava Semushin; 17.01.2012
comment
java -cp ../lib/hsqldb.jar org.hsqldb.Server... работает без ошибок? - person Piotr Gwiazda; 17.01.2012
comment
@peter-gwiazda Когда я запускаю сервер вручную, я могу подключиться к нему с помощью предоставленной команды. Но в моем случае Spring запускает сервер, поэтому я спрашиваю, как подключиться к HSQL, который работает под управлением Spring. - person Slava Semushin; 18.01.2012
comment
Это скорее невозможно. Вам нужно запустить сервер вручную и подключиться к приложению Spring и другим приложениям. Во встроенном режиме вы можете получить доступ только к той же JVM. Что не так с серверным режимом? Что вы храните в БД? Зачем перезапускать БД каждый раз с приложением? - person Piotr Gwiazda; 18.01.2012
comment
Вы были правы, что я не могу подключиться к HSQL из другого процесса JVM. Для этого я использовал консоль H2. Сегодня я нашел еще один способ добиться этого с помощью Spring и HSQL: mkyong.com/spring/ - person Slava Semushin; 22.06.2015
comment
Обратите внимание, что для запуска HSQLDB в режиме сервера (что позволяет подключаться к внешним клиентам) вам не нужно запускать его в отдельном процессе. Вы можете встроить его в свое приложение, создав экземпляр объекта org.hsqldb.server.Server. - person pacoverflow; 21.10.2016

Я рекомендую вам использовать внешнюю базу данных, но на всякий случай, если вы хотите использовать HSQL, это может помочь вам http://java.dzone.com/articles/spring-3-makes-use-встроенный-легкий

person emilan    schedule 16.01.2012
comment
+1, кроме того, аннотация транзакций для интеграционных тестов ContextConfiguration по умолчанию будет выполнять откат, что сделает базу данных разработки безопасной и согласованной после тестирования. - person Aubergine; 16.05.2015

Встроенная база данных — это БД в памяти, а Spring поддерживает HSQL, H2 и Derby. Вы можете перейти на соответствующий сайт для получения подробной информации о подключении.

Для H2 см. здесь . Для HSQL см. здесь и здесь.

Насколько я понимаю,

<jdbc:embedded-database id="dataSource" type="HSQL">
  <jdbc:script location="classpath:scheme.sql" /
</jdbc:embedded-database>

использует БД в памяти и поэтому недоступен извне. Вы сможете получить к нему доступ в той же виртуальной машине и в том же загрузчике классов.

person Aravind A    schedule 16.01.2012
comment
Можем ли мы использовать файл XML для загрузки в БД - person VinayVeluri; 05.02.2013

Вы можете подключиться к встроенной базе данных обычным способом (SQL Developer, SQL Explorer и т. д.); Я использовал свой отладчик, чтобы просмотреть свойство URL во встроенном компоненте базы данных, который я создал с помощью Spring, в вашем случае dataSource. Я бы подумал, что ваш URL-адрес будет чем-то вроде jdbc:hsqldb:mem:dataSource.

person Aaron    schedule 07.09.2012
comment
Это определенно не сработает, потому что база данных в памяти доступна только внутри одного процесса JVM. - person Slava Semushin; 22.06.2015

Для некоторых людей достаточным решением будет использование консоли h2, как описано здесь:

подключение jdbc H2 по умолчанию для весенней загрузки (и консоль H2)

Вы должны только не забыть установить драйверы hsqldb там, где это необходимо. Таким образом, базу данных не нужно запускать отдельно. Вам также не нужно устанавливать какое-либо дополнительное программное обеспечение для его просмотра.

person gajos    schedule 19.04.2016

ты можешь сделать вот так

final ApplicationContext ctx = new ClassPathXmlApplicationContext("dao-context.xml");
final DataSource dataSource = (DataSource)ctx.getBean("dataSource");
final Connection conn = dataSource.getConnection();
person Tanmay Saha    schedule 30.05.2012