有没有办法浏览H2或HSQLDB内存数据库的内容以供查看?例如,在与Hibernate进行调试会话期间,为了检查刷新何时执行;或者确保实例化数据库的脚本能够提供预期的结果。查看H2或HSQLDB内存数据库的内容
它是否存在一个插件或一个库,你可以嵌入你的代码为了让这个?
请提一下你正在谈论哪一个(H2或HSQLDB),以防你有一个答案是特定的。
有没有办法浏览H2或HSQLDB内存数据库的内容以供查看?例如,在与Hibernate进行调试会话期间,为了检查刷新何时执行;或者确保实例化数据库的脚本能够提供预期的结果。查看H2或HSQLDB内存数据库的内容
它是否存在一个插件或一个库,你可以嵌入你的代码为了让这个?
请提一下你正在谈论哪一个(H2或HSQLDB),以防你有一个答案是特定的。
您可以在您的应用程序中运行H2 web server,该程序将访问相同的内存数据库。您还可以使用任何通用JDBC客户端(如SquirrelSQL)访问在服务器模式下运行的H2。
UPDATE:
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
数据库。请记住关闭两台服务器。另见:H2 database in memory mode cannot be accessed by Console。
你也可以使用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>
BTW,你应该只依赖于断言,而不是手动偷看数据库内容。仅用于故障排除。
N.B.如果您使用Spring测试框架,则不会看到正在运行的事务所做的更改,并且此事务将在测试后立即回滚。
使用HSQLDB,您有几个内置选项。
有两个GUI数据库管理器和数据库的命令行界面。这些类是:
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
对于H2,您可以start a web server within your code调试会话期间,如果你有一个数据库连接对象。您可以将该行添加到您的代码,或作为“监视表达式”(动态):
org.h2.tools.Server.startWebServer(conn);
服务器工具将启动本地Web浏览器,使您可以访问数据库。
对于HSQLDB,以下为我工作:
DatabaseManager.threadedDBM();
这带来了GUI与我的表和数据。
我也试过Swing版本,但它只有一个main
,我不确定要传递的参数。如果有人知道,请在这里发帖。
仅仅因为我搜索了正确的数据库名称的小时:数据库的名称是您的数据源的名称。因此,如果您有一个id = dataSource的数据源bean,请尝试使用URL jdbc:hsqldb:mem:dataSource。如果这不起作用,请尝试默认的testdb。
org.hsqldb.util.DatabaseManagerSwing.main(new String [] {“--url”,URL,“--user”,USERNAME,“ - password”,PASSWORD}) ; –
在H2,什么对我的工作原理是:
我的代码,开始像服务器:
server = Server.createTcpServer().start();
启动服务器上localhost
端口9092.
然后,在代码中,建立在以下JDBC URL一个数据库连接:
jdbc:h2:tcp://localhost:9092/mem:test;DB_CLOSE_DELAY=-1;MODE=MySQL
,而DEB ugging,作为客户端来检查我用H2,这是不够好,提供的一个数据库,启动它,你只需要启动以下Java主要分别
org.h2.tools.Console
这将启动Web服务器与在8082应用程序,发动localhost:8082
一个浏览器,然后就可以进入以前的网址看到DB
可以公开为JMX功能,通过可启动的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 />
这实际上是一个很好的窍门! – jplandrain
这是一个播放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 <[email protected]>
*/
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");
}
}
}
我已经到inMemory H2版本1.4.190远程连接(一个问题以及在文件中)与Connection is broken: "unexpected status 16843008"
直到不降级到1.3.176。见Grails accessing H2 TCP server hangs
我不知道为什么它在你的机器上工作正常,但我不得不花一天时间才能使它工作。
服务器通过URL“jdbc:h2:tcp:// localhost:9092 /〜/ default”与Intellij Idea U一起工作。
“localhost:8082”在浏览器中工作正常。
我加入到MVC-调度 - servlet.xml中
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" depends-on="h2Server">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:tcp://localhost:9092/~/default"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="h2Server" class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop" depends-on="h2WebServer">
<constructor-arg>
<array>
<value>-tcp</value>
<value>-tcpAllowOthers</value>
<value>-tcpPort</value>
<value>9092</value>
</array>
</constructor-arg>
</bean>
<bean id="h2WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" destroy-method="stop">
<constructor-arg>
<array>
<value>-web</value>
<value>-webAllowOthers</value>
<value>-webPort</value>
<value>8082</value>
</array>
</constructor-arg>
</bean>
我有错误 “真” 是无效的选项此。 -webAllowOthers是否曾经参数?使用最新的H2代码,它不需要任何参数。看看这里的“main”方法:http://www.h2database.com/javadoc/org/h2/tools/Server.html – hshib
就像上面提到的那样,最新版本不接受“true”参数,只是删除它:'< constructor-arg value =“ - web,-webAllowOthers,-webPort,8082”/>' –
新版本遵循单独的参数约定 '服务器。createTcpServer(“ - tcpPort”,“9092”,“-tcpAllowOthers”)' 'Server.createWebServer(“ - webPort”,“8082”,“-tcpAllowOthers”)' – Jor