Есть ли способ просмотреть содержимое базы данных H2 или HSQLDB в памяти для просмотра? Например, во время сеанса отладки с Hibernate, чтобы проверить, когда выполняется сброс; или убедиться, что сценарий, создающий экземпляр БД, дает ожидаемый результат.
Существует ли надстройка или библиотека, которые вы можете встроить в свой код, чтобы разрешить это?
Пожалуйста, укажите, о каком из них вы говорите (H2 или HSQLDB), если у вас есть ответ по одному из них.
hsqldb
h2
in-memory-database
jplandrain
источник
источник
Ответы:
Вы можете запустить веб-сервер H2 в своем приложении, которое будет обращаться к той же базе данных в памяти. Вы также можете получить доступ к H2, работающему в режиме сервера, с помощью любого универсального клиента JDBC, например SquirrelSQL .
ОБНОВИТЬ:
Server webServer = Server.createWebServer("-web,-webAllowOthers,true,-webPort,8082").start(); Server server = Server.createTcpServer("-tcp,-tcpAllowOthers,true,-tcpPort,9092").start();
Теперь вы можете подключиться к своей базе данных через
jdbc:h2:mem:foo_db
URL-адрес в рамках того же процесса или просмотретьfoo_db
базу данных с помощьюlocalhost:8082
. Не забудьте закрыть оба сервера. Смотрите также: База данных H2 в режиме памяти недоступна для консоли .Вы также можете использовать Spring:
<bean id="h2Server" class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop" depends-on="h2WebServer"> <constructor-arg value="-tcp,-tcpAllowOthers,true,-tcpPort,9092"/> </bean> <bean id="h2WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" destroy-method="stop"> <constructor-arg value="-web,-webAllowOthers,true,-webPort,8082"/> </bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" depends-on="h2Server"> <property name="driverClass" value="org.h2.Driver"/> <property name="jdbcUrl" value="jdbc:h2:mem:foo_db"/> </bean>
Кстати, вы должны полагаться только на утверждения, а не на ручной просмотр содержимого базы данных. Используйте это только для устранения неполадок.
NB, если вы используете платформу тестирования Spring, вы не увидите изменений, внесенных в выполняющуюся транзакцию, и эта транзакция будет отменена сразу после теста.
источник
<constructor-arg value="-web,-webAllowOthers,-webPort,8082"/>
Server.createTcpServer("-tcpPort" ,"9092", "-tcpAllowOthers")
Server.createWebServer("-webPort", "8082", "-tcpAllowOthers")
Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082").start();
Для H2 вы можете запустить веб-сервер в своем коде во время сеанса отладки, если у вас есть объект подключения к базе данных. Вы можете добавить эту строку в свой код или как «выражение для наблюдения» (динамически):
Серверный инструмент запустит локальный веб-браузер, который позволит вам получить доступ к базе данных.
источник
DataSource
экземпляр к моему тесту и добавил метод с теломorg.h2.tools.Server.startWebServer(dataSource.getConnection());
. Теперь при оценке этого метода открывается браузер. Обратите внимание, что это приводит к засыпанию выполнения до тех пор, пока вы не отключитесь (значок в верхнем левом углу браузера)!В H2 у меня работает следующее:
Я кодирую, запуская сервер, например:
Это запускает сервер на
localhost
порту 9092.Затем в коде установите соединение с БД по следующему URL-адресу JDBC:
Во время отладки в качестве клиента для проверки БД я использую тот, который предоставляется H2, что достаточно хорошо, для его запуска вам просто нужно отдельно запустить следующую java main
Это запустит веб-сервер с приложением на 8082, запустит браузер на
localhost:8082
И затем вы можете ввести предыдущий URL, чтобы увидеть БД
источник
С HSQLDB у вас есть несколько встроенных опций.
Есть два менеджера баз данных с графическим интерфейсом пользователя и интерфейс командной строки для базы данных. Классы для них:
Вы можете запустить одно из перечисленных выше из своего приложения и получить доступ к базам данных в памяти.
Пример с JBoss приведен здесь:
http://docs.jboss.org/jbpm/v3.2/userguide/html/ch07s03.html
Вы также можете запустить сервер со своим приложением, указав его на базу данных в памяти.
источник
Вы можете представить его как функцию JMX, запускаемую через JConsole:
XML-контекст:
источник
Это контроллер Play 2 для инициализации H2 TCP и веб-серверов:
package controllers; import org.h2.tools.Server; import play.mvc.Controller; import play.mvc.Result; import java.sql.SQLException; /** * Play 2 controller to initialize H2 TCP Server and H2 Web Console Server. * * Once it's initialized, you can connect with a JDBC client with * the URL `jdbc:h2:tcp://127.0.1.1:9092/mem:DBNAME`, * or can be accessed with the web console at `http://localhost:8082`, * and the URL JDBC `jdbc:h2:mem:DBNAME`. * * @author Mariano Ruiz <mrsarm@gmail.com> */ public class H2ServerController extends Controller { private static Server h2Server = null; private static Server h2WebServer = null; public static synchronized Result debugH2() throws SQLException { if (h2Server == null) { h2Server = Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092"); h2Server.start(); h2WebServer = Server.createWebServer("-web","-webAllowOthers","-webPort","8082"); h2WebServer.start(); return ok("H2 TCP/Web servers initialized"); } else { return ok("H2 TCP/Web servers already initialized"); } } }
источник
Для HSQLDB у меня сработало следующее:
И это вызвало графический интерфейс с моими таблицами и данными, как только я указал его справа с именем in-mem database.
По сути, это эквивалент новой
DatabaseManager
версии (не Swing), которая запрашивает подробности подключения и имеет значение--noexit
)Я также пробовал версию Swing, но у нее был только a
main
, и я не был уверен, какие аргументы нужно передать. Если кто знает, напишите здесь.Просто потому, что я часами искал правильное имя базы данных: имя базы данных - это имя вашего источника данных. Поэтому попробуйте использовать URL-адрес jdbc: hsqldb: mem: dataSource, если у вас есть компонент источника данных с id = dataSource. Если это не сработает, попробуйте testdb по умолчанию.
источник
У меня проблема с удаленным подключением H2 версии 1.4.190 к inMemory (а также в файле),
Connection is broken: "unexpected status 16843008"
пока не переходите на версию 1.3.176. См. Grails при доступе к серверу H2 TCP зависаетисточник
Это больше комментарий к предыдущему сообщению Томаса Мюллера, а не ответ, но для этого недостаточно репутации. Другой способ установить соединение, если вы используете Spring JDBC Template, использует следующее:
Итак, в режиме отладки, если вы добавите в представление «Выражения» в Eclipse, он откроет браузер, показывающий вам консоль H2:
Представление Eclipse Expressions
Консоль H2
источник
Я не знаю, почему он нормально работает на ваших машинах, но мне пришлось потратить день, чтобы заставить его работать.
Сервер работает с Intellij Idea U по URL-адресу «jdbc: h2: tcp: // localhost: 9092 / ~ / default».
"localhost: 8082" в браузере тоже работает нормально.
Я добавил это в mvc-dispatcher-servlet.xml
источник
Как насчет удобного просмотра (а также редактирования) контента через ODBC и MS-Access, Excel? Версии программного обеспечения:
H2 Сервер:
Конфигурация источника данных ODBC для Windows10, которая может использоваться любым клиентом ODBC: в поле Databse должно использоваться имя, указанное в параметре «-key».
источник