93

H2 または HSQLDB インメモリ データベースのコンテンツを参照して表示する方法はありますか? たとえば、フラッシュがいつ実行されるかを確認するために、Hibernate を使用したデバッグ セッション中。または、DB をインスタンス化するスクリプトが期待どおりの結果をもたらすことを確認します。

これを可能にするためにコードに埋め込むことができるアドオンまたはライブラリは存在しますか?

それらのいずれかに固有の回答がある場合は、どちらについて話しているか (H2 または HSQLDB) について言及してください。

4

11 に答える 11

63

同じメモリ内データベースにアクセスするアプリケーション内で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 テスト フレームワークを使用する場合、実行中のトランザクションによって行われた変更は表示されず、このトランザクションはテストの直後にロールバックされます。

于 2011-09-05T14:27:30.760 に答える
34

H2 の場合、データベース接続オブジェクトがある場合、デバッグ セッション中にコード内で Web サーバーを起動できます。この行をコードに追加するか、「ウォッチ式」として (動的に) 追加できます。

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

サーバー ツールは、データベースにアクセスできる Web ブラウザーをローカルで起動します。

于 2011-09-06T05:09:11.400 に答える
10

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 が提供するものを使用します。これで十分です。次の Java メインを個別に起動するだけで十分です。

org.h2.tools.Console

これにより、8082 でアプリを使用して Web サーバーが起動し、次の URL でブラウザーが起動します。localhost:8082

そして、前の URL を入力して DB を表示できます

于 2013-05-03T14:51:11.173 に答える
4

HSQLDBの場合、次のことがうまくいきました:

DatabaseManager.threadedDBM();

そして、私が正しい名前のメモリ内データベースを指し示すと、テーブルとデータを含む GUI が表示されました。

これは基本的に、DatabaseManager(Swing 以外の種類の) a を新規作成することと同等であり、接続の詳細を求めるプロンプトが表示され、 に設定され--noexitます)

Swing バージョンも試してみましたが、 しかなく、main渡す引数がわかりませんでした。知っている人は、ここに投稿してください。

正しいデータベース名を何時間も検索したからといって、データベースの名前はデータソースの名前です。したがって、id=dataSource のデータ ソース Bean がある場合は、URL jdbc:hsqldb:mem:dataSource を試してください。これが機能しない場合は、デフォルトの testdb を試してください。

于 2012-12-05T21:07:58.250 に答える
4

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
于 2011-09-05T16:08:40.300 に答える
3

これは、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");
        }
    }
}
于 2015-05-19T12:50:56.030 に答える
1

H2 バージョン 1.4.190 の inMemory (およびファイル内) へのリモート接続に問題があり、1.3.176 に Connection is broken: "unexpected status 16843008"ダウングレードしないでください。Grailsが H2 TCP サーバーにアクセスするとハングする

于 2015-11-15T11:37:52.787 に答える
0

ODBC と MS-Access、Excel でコンテンツを快適に表示 (および編集) するにはどうすればよいでしょうか? ソフトウェアのバージョン::

  • H2 バージョン:1.4.196
  • Win 10 Postgres ODBC ドライバーのバージョン: psqlodbc_09_03_0210
  • Win7 ODBC クライアントの場合: win7_psqlodbc_09_00_0101-x64.msi

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 データソース構成: データベース フィールドでは、'-key' パラメータで指定された名前を使用する必要があります。 ODBC 構成

于 2020-03-27T09:28:38.180 に答える