查看H2或HSQLDB内存数据库的内容

jpl*_*ain 83 h2 hsqldb in-memory-database

有没有办法浏览H2或HSQLDB内存数据库的内容以供查看?例如,在与Hibernate的调试会话期间,为了检查执行刷新的时间; 或者确保实例化DB的脚本给出了预期的结果.

是否存在可以嵌入代码的插件或库,以便允许这样做?

如果你有一个特定于其中一个的答案,请提及你正在谈论的那个(H2或HSQLDB).

Tom*_*icz 55

您可以在应用程序中运行H2 Web服务器,该服务器将访问相同的内存数据库.您还可以使用任何通用JDBC客户端(如SquirrelSQL)访问在服务器模式下运行的H2 .

更新:

Server webServer = Server.createWebServer("-web,-webAllowOthers,true,-webPort,8082").start();
Server server = Server.createTcpServer("-tcp,-tcpAllowOthers,true,-tcpPort,9092").start();
Run Code Online (Sandbox Code Playgroud)

现在,您可以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>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你应该只依赖于断言而不是手动查看数据库内容.仅用于故障排除.

注意,如果您使用Spring测试框架,您将看不到正在运行的事务所做的更改,并且此事务将在测试后立即回滚.

  • 在纯Java中,你必须删除"true"参数,并将这些参数分开:`Server.createWebServer(" - web"," - webAllowOthers"," - webPort","8082").start(); ` (7认同)
  • 我收到错误,"true"是无效选项.-webAllowOthers用于参数吗?使用最新的H2代码,它不需要任何参数.请看这里的"主要"方法:http://www.h2database.com/javadoc/org/h2/tools/Server.html (2认同)
  • 就像 hman 提到的,最新版本不接受“true”参数,所以只需删除它:`&lt;constructor-arg value =“-web,-webAllowOthers,-webPort,8082”/&gt;` (2认同)
  • 新版本遵循单独的参数约定`Server.createTcpServer(" - tcpPort","9092"," - tcpAllowOthers")``Server.createWebServer(" - webPort","8082"," - tcpAllowOthers")` (2认同)
  • 使用Spring Boot,您只需在application.properties文件中设置"h2.console.enabled:true"和"h2.console.path:h2-console". (2认同)

Tho*_*ler 29

对于H2,如果您有数据库连接对象,则可以在调试会话期间在代码启动Web服务器.您可以将此行添加到代码中,或者作为"监视表达式"(动态地)添加:

org.h2.tools.Server.startWebServer(conn);
Run Code Online (Sandbox Code Playgroud)

服务器工具将在本地启动Web浏览器,允许您访问数据库.

  • 对那些使用Spring数据的人的评论 - 您可以通过以下方式从ApplicationContext获取连接:((DataSource)context.getBean("dataSource")).getConnection() (4认同)
  • 如果在调试时使用intelliJ中的“ evaluateExpression”对它进行调试,它甚至可以工作。(将其余手表锁定,直到停止) (3认同)

dsa*_*lla 9

在H2,对我有用的是:

我编码,启动服务器像:

server = Server.createTcpServer().start();
Run Code Online (Sandbox Code Playgroud)

这将在localhost端口9092 上启动服务器.

然后,在代码中,在以下JDBC URL上建立数据库连接:

jdbc:h2:tcp://localhost:9092/mem:test;DB_CLOSE_DELAY=-1;MODE=MySQL
Run Code Online (Sandbox Code Playgroud)

在调试时,作为检查数据库的客户端我使用H2提供的,这已经足够好了,启动它只需要分别启动以下java main

org.h2.tools.Console
Run Code Online (Sandbox Code Playgroud)

这将启动带有8082应用程序的Web服务器,启动浏览器 localhost:8082

然后您可以输入以前的URL以查看数据库