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

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

它是否存在一个插件或一个库,你可以embedded你的代码,以便这样做?

请提及您正在谈论的哪一个(H2或HSQLDB),以备您对其中一个答案有特定的答案。

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

更新:

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在同一进程中连接到数据库,或使用localhost:8082浏览foo_db数据库。 记得要closures这两个服务器。 另请参阅: 内存模式下的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> 

顺便说一句,你应该只依靠断言,而不是手动偷看数据库内容。 只能用于故障排除。

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

对于H2,如果有一个数据库连接对象,则可以在debugging会话期间在代码中启动Web服务器 。 您可以将此行添加到您的代码中,或作为“监视expression式”(dynamic)添加:

 org.h2.tools.Server.startWebServer(conn); 

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

在H2中,对我有用的是:

我编码,启动服务器,如:

 server = Server.createTcpServer().start(); 

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

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

 jdbc:h2:tcp://localhost:9092/mem:test;DB_CLOSE_DELAY=-1;MODE=MySQL 

在debugging的时候,作为一个客户端来检查数据库,我使用H2提供的那个,这足以启动它,你只需要启动下面的java main

 org.h2.tools.Console 

这将在8082上启动一个带有应用程序的web服务器,在localhost:8082上启动一个浏览器

然后你可以input以前的URL来查看数据库

有了HSQLDB,你有几个内置的选项。

有两个GUI数据库pipe理器和一个到数据库的命令行界面。 这些类是:

 org.hsqldb.util.DatabaseManager org.hsqldb.util.DatabaseManagerSwing org.hsqldb.cmdline.SqlTool 

您可以从应用程序启动上述任一项,并访问内存数据库。

这里给出一个JBoss的例子:

http://docs.jboss.org/jbpm/v3.2/userguide/html/ch07s03.html

您也可以使用应用程序启动服务器,并将其指向内存数据库。

 org.hsqldb.Server 

您可以将其公开为JMXfunction,可通过JConsole启动:

 @ManagedResource @Named public class DbManager { @ManagedOperation(description = "Start HSQL DatabaseManagerSwing.") public void dbManager() { String[] args = {"--url", "jdbc:hsqldb:mem:embeddedDataSource", "--noexit"}; DatabaseManagerSwing.main(args); } } 

XML上下文:

 <context:component-scan base-package="your.package.root" scoped-proxy="targetClass"/> <context:annotation-config /> <context:mbean-server /> <context:mbean-export /> 

这是一个Play 2控制器来初始化H2 TCP和Web服务器:

 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,以下工作适合我:

 DatabaseManager.threadedDBM(); 

这带来了我的表格和数据的graphics用户界面。

我也尝试了Swing版本,但它只有一个main ,我不确定通过的论据。 如果有人知道,请张贴在这里。

只是因为我search了正确的数据库名称的小时数:数据库的名称是您的数据源的名称。 因此,如果您有一个id = dataSource的数据源bean,请尝试使用URL jdbc:hsqldb:mem:dataSource。 如果这不起作用,请尝试默认的testdb。

我有H2版本1.4.190远程连接到内存(以及在文件中)与Connection is broken: "unexpected status 16843008"直到不降级到1.3.176。 请参阅访问H2 TCP服务器的Grails挂起