보기 위해 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를 시도하십시오.
