[hsqldb] H2 또는 HSQLDB 인 메모리 데이터베이스의 내용보기

보기 위해 H2 또는 HSQLDB 인 메모리 데이터베이스의 콘텐츠를 탐색하는 방법이 있습니까? 예를 들어, 플러시가 언제 실행되는지 확인하기 위해 Hibernate로 디버깅 세션 동안; 또는 DB를 인스턴스화하는 스크립트가 예상 결과를 제공하는지 확인하십시오.

이를 허용하기 위해 코드와 함께 포함 할 수있는 애드온 또는 라이브러리가 있습니까?

그들 중 하나에 대한 답변이있는 경우에 대비하여 어떤 것 (H2 또는 HSQLDB)에 대해 이야기하고 있는지 언급하십시오.



답변

동일한 인 메모리 데이터베이스에 액세스 할 애플리케이션 내에서 H2 웹 서버를 실행할 수 있습니다 . 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>

BTW 데이터베이스 콘텐츠를 수동으로 들여다 보는 것이 아니라 단언에만 의존해야합니다. 문제 해결을 위해서만 사용하십시오.

NB Spring 테스트 프레임 워크를 사용하는 경우 실행중인 트랜잭션에 의해 변경된 사항을 볼 수 없으며이 트랜잭션은 테스트 직후 롤백됩니다.


답변

H2의 경우 데이터베이스 연결 개체가있는 경우 디버깅 세션 중에 코드 내에서 웹 서버를 시작할 수 있습니다 . 이 줄을 코드에 추가하거나 ‘감시 식'(동적으로)으로 추가 할 수 있습니다.

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

서버 도구는 데이터베이스에 액세스 할 수있는 웹 브라우저를 로컬로 시작합니다.


답변

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에서 제공하는 것을 사용합니다. 이것은 실행하기에 충분합니다. 다음 자바 메인을 별도로 실행하면됩니다.

org.h2.tools.Console

그러면 8082에서 앱으로 웹 서버가 시작되고 브라우저가 시작됩니다. localhost:8082

그런 다음 이전 URL을 입력하여 DB를 볼 수 있습니다.


답변

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


답변

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 및 웹 서버를 초기화하는 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를 불러 일으켰습니다.

그것은 기본적으로 newing up과 동일합니다. DatabaseManager (비 스윙 다양한), 연결 정보에 대한 메시지를 표시하고로 설정 --noexit)

스윙 버전도 시도했지만 main 통과해야 할 인수가 확실하지 않았습니다. 아는 사람이 있으면 여기에 게시하십시오.

올바른 데이터베이스 이름을 몇 시간 동안 검색했기 때문에 : 데이터베이스 이름은 데이터 소스의 이름입니다. 따라서 id = dataSource 인 데이터 소스 Bean이있는 경우 URL jdbc : hsqldb : mem : dataSource로 시도하십시오. 이것이 작동하지 않으면 기본값 인 testdb를 시도하십시오.