有沒有辦法瀏覽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