Pertanyaan Lihat konten dari database dalam-memori H2 atau HSQLDB


Apakah ada cara untuk menelusuri konten dari H2 atau database dalam-memori HSQLDB untuk dilihat? Misalnya, selama sesi debugging dengan Hibernate untuk memeriksa kapan flush dieksekusi; atau untuk memastikan skrip yang membuat instantiate DB memberikan hasil yang diharapkan.

Apakah ada addon atau pustaka yang dapat Anda embed dengan kode Anda untuk memungkinkan ini?

Tolong, sebutkan mana yang Anda bicarakan (H2 atau HSQLDB) jika Anda memiliki jawaban khusus untuk salah satunya.


75
2017-09-05 14:20


asal


Jawaban:


Anda dapat menjalankan H2 server web dalam aplikasi Anda yang akan mengakses basis data di memori yang sama. Anda juga dapat mengakses H2 berjalan dalam mode server menggunakan klien JDBC generik seperti SquirrelSQL.

MEMPERBARUI:

Server webServer = Server.createWebServer("-web,-webAllowOthers,true,-webPort,8082").start();
Server server = Server.createTcpServer("-tcp,-tcpAllowOthers,true,-tcpPort,9092").start();

Sekarang Anda dapat terhubung ke database Anda melalui jdbc:h2:mem:foo_db URL dalam proses yang sama atau telusuri foo_db database menggunakan localhost:8082. Ingatlah untuk menutup kedua server. Lihat juga: Database H2 dalam mode memori tidak dapat diakses oleh Konsol.

Anda juga dapat menggunakan 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 Anda hanya harus bergantung pada pernyataan dan bukan pada pengguna yang mengintip isi basis data. Gunakan ini hanya untuk mengatasi masalah.

N.B. jika Anda menggunakan kerangka uji Spring, Anda tidak akan melihat perubahan yang dibuat oleh transaksi berjalan dan transaksi ini akan dikembalikan segera setelah tes.


49
2017-09-05 14:27



Untuk H2, Anda bisa mulai server web dalam kode Anda selama sesi debugging jika Anda memiliki objek koneksi database. Anda dapat menambahkan baris ini ke kode Anda, atau sebagai 'ekspresi jam' (dinamis):

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

Alat server akan memulai browser web lokal yang memungkinkan Anda untuk mengakses database.


26
2017-09-06 05:09



Dalam H2, yang berhasil untuk saya adalah:

Saya kode, memulai server seperti:

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

Itu memulai server localhost port 9092.

Kemudian, dalam kode, buat koneksi DB pada URL JDBC berikut:

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

Sementara debugging, sebagai klien untuk memeriksa DB saya menggunakan yang disediakan oleh H2, yang cukup bagus, untuk meluncurkannya Anda hanya perlu menjalankan java berikut secara terpisah

org.h2.tools.Console

Ini akan memulai server web dengan aplikasi di 8082, meluncurkan browser localhost:8082

Dan kemudian Anda dapat memasukkan URL sebelumnya untuk melihat DB


7
2018-05-03 14:51



Dengan HSQLDB, Anda memiliki beberapa opsi bawaan.

Ada dua pengelola basis data GUI dan antarmuka baris perintah ke basis data. Kelas-kelas untuk ini adalah:

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

Anda dapat memulai salah satu dari yang di atas dari aplikasi Anda dan mengakses database di-memori.

Contoh dengan JBoss diberikan di sini:

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

Anda juga dapat memulai server dengan aplikasi Anda, mengarahkannya ke basis data di memori.

org.hsqldb.Server

4
2017-09-05 16:08



Anda dapat mengeksposnya sebagai fitur JMX, dapat dijalankan melalui 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);
    }
}

Konteks XML:

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

3
2017-10-29 17:58



Ini adalah kontroler Play 2 untuk menginisialisasi server H2 TCP dan 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");
        }
    }
}

2
2018-05-19 12:50



Untuk HSQLDB, berikut ini bekerja untuk saya:

DatabaseManager.threadedDBM();

Dan ini memunculkan GUI dengan tabel dan data saya.

Saya juga mencoba versi Swing, tetapi hanya memiliki a main, dan saya tidak yakin argumen untuk lulus. Jika ada yang tahu, silakan posting di sini.

Hanya karena saya mencari jam untuk nama database yang tepat: Nama database adalah nama sumber data Anda. Jadi coba dengan URL jdbc: hsqldb: mem: dataSource jika Anda memiliki kacang sumber data dengan id = dataSource. Jika ini tidak berhasil, coba testdb yang merupakan default.


1
2017-12-05 21:07



Saya punya masalah dengan H2 versi 1.4.190 koneksi remote ke inMemory (serta di file) dengan Connection is broken: "unexpected status 16843008" sampai tidak menurunkan ke 1.3.176. Lihat Grails mengakses server H2 TCP hang


1
2017-11-15 11:37