H2またはHSQLDBのインメモリデータベースのコンテンツを閲覧用に閲覧する方法はありますか?たとえば、フラッシュがいつ実行されたかを確認するためにHibernateを使用したデバッグセッション中に。または、DBをインスタンス化するスクリプトが期待どおりの結果を与えることを確認します。
これを可能にするためにコードに埋め込むことができるアドオンまたはライブラリは存在しますか?
それらのいずれかに固有の答えがある場合に備えて、話しているのはどれか(H2またはHSQLDB)を述べてください。
H2またはHSQLDBのインメモリデータベースのコンテンツを閲覧用に閲覧する方法はありますか?たとえば、フラッシュがいつ実行されたかを確認するためにHibernateを使用したデバッグセッション中に。または、DBをインスタンス化するスクリプトが期待どおりの結果を与えることを確認します。
これを可能にするためにコードに埋め込むことができるアドオンまたはライブラリは存在しますか?
それらのいずれかに固有の答えがある場合に備えて、話しているのはどれか(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 を介してデータベースに接続するか、を使用してデータベースを参照でき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>
ところで、データベースのコンテンツを手動でピークするのではなく、アサーションのみに依存する必要があります。これはトラブルシューティングにのみ使用してください。
注意: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の場合、データベース接続オブジェクトがあれば、デバッグセッション中にコード内でWebサーバーを起動できます。この行をコードに追加するか、「ウォッチ式」として(動的に)追加できます。
org.h2.tools.Server.startWebServer(conn);
サーバーツールは、ローカルでWebブラウザーを起動し、データベースにアクセスできるようにします。
H2で私に有効なのは次のとおりです。
私はコーディングして、サーバーを起動します:
server = Server.createTcpServer().start();
これにより、サーバーはlocalhost
ポート9092で起動します。
次に、コードで、次のJDBC URLでDB接続を確立します。
jdbc:h2:tcp://localhost:9092/mem:test;DB_CLOSE_DELAY=-1;MODE=MySQL
デバッグ中は、DBを検査するクライアントとして、H2が提供するDBを使用して起動します。これを起動するには、次のJavaメインを個別に起動するだけです。
org.h2.tools.Console
これにより、8082のアプリでWebサーバーが起動し、ブラウザが起動します localhost:8082
次に、以前のURLを入力してDBを表示できます
HSQLDBには、いくつかの組み込みオプションがあります。
2つの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
JConsoleから起動可能なJMX機能として公開できます。
@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 />
これは、H2 TCPおよびWebサーバーを初期化するPlay 2コントローラーです。
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();
そして、これは私のテーブルとデータでGUIを表示しました。
Swingバージョンも試してみましたが、しかなく、main
渡す引数がわかりませんでした。どなたかご存知の方はこちらに投稿してください。
正しいデータベース名を何時間も検索したからといって:データベースの名前はデータソースの名前です。したがって、id = dataSourceのデータソースBeanがある場合は、URL jdbc:hsqldb:mem:dataSourceで試してください。これが機能しない場合は、デフォルトのtestdbを試してください。
Connection is broken: "unexpected status 16843008"
1.3.176にダウングレードしない限り、inMemory(およびファイル内)へのH2バージョン1.4.190リモート接続に問題があります 。H2 TCPサーバーのハングにアクセスするGrailsを参照してください。
これは答えではなく、以前のThomas Muellerの投稿に対するコメントですが、十分な評判がありません。Spring JDBCテンプレートである場合に接続を取得する別の方法は、以下を使用することです。
jdbcTemplate.getDataSource().getConnection();
したがって、デバッグモードでEclipseの[Expressions]ビューに追加すると、ブラウザーが開き、H2コンソールが表示されます。
org.h2.tools.Server.startWebServer(jdbcTemplate.getDataSource().getConnection());
なぜあなたのマシンでうまく機能するのかは分かりませんが、機能させるために1日を費やす必要がありました。
サーバーは、URL "jdbc:h2:tcp:// localhost:9092 /〜/ default"を介してIntellij Idea Uで動作します。
ブラウザーの「localhost:8082」も正常に機能します。
これをmvc-dispatcher-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>
ODBCとMS-Access、Excelでコンテンツを快適に表示(および編集)することについてはどうですか?ソフトウェアバージョン::
H2サーバー:
/*
For JDBC Clients to connect:
jdbc:h2:tcp://localhost:9092/trader;CIPHER=AES;IFEXISTS=TRUE;MVCC=true;LOCK_TIMEOUT=60000;CACHE_SIZE=131072;CACHE_TYPE=TQ
*/
public class DBStarter {
public static final String BASEDIR = "/C:/Trader/db/";
public static final String DB_URL = BASEDIR + "trader;CIPHER=AES;IFEXISTS=TRUE;MVCC=true;LOCK_TIMEOUT=10000;CACHE_SIZE=131072;CACHE_TYPE=TQ";
static void startServer() throws SQLException {
Server tcpServer = Server.createTcpServer(
"-tcpPort", "9092",
"-tcpAllowOthers",
"-ifExists",
// "-trace",
"-baseDir", BASEDIR
);
tcpServer.start();
System.out.println("H2 JDBC Server started: " + tcpServer.getStatus());
Server pgServer = Server.createPgServer(
"-pgPort", "10022",
"-pgAllowOthers",
"-key", "traderdb", DB_URL
);
pgServer.start();
System.out.println("H2 ODBC PGServer started: " + pgServer.getStatus());
}
}
任意のODBCクライアントで使用できるWindows10 ODBCデータソース構成:Databseフィールドでは、「-key」パラメーターで指定された名前を使用する必要があります。