2011-09-05 15 views
74

क्या सामग्री देखने के लिए एच 2 या एचएसक्यूएलडीबी मेमोरी डेटाबेस की सामग्री ब्राउज़ करने का कोई तरीका है? उदाहरण के लिए, फ्लश निष्पादित होने पर जांचने के लिए हाइबरनेट के साथ एक डिबगिंग सत्र के दौरान; या यह सुनिश्चित करने के लिए कि डीबी को तुरंत चालू करने वाली स्क्रिप्ट अपेक्षित परिणाम देती है।एच 2 या एचएसक्यूएलडीबी में मेमोरी डेटाबेस

क्या यह एक एडन या लाइब्रेरी मौजूद है जिसे आप अनुमति देने के लिए अपने कोड के साथ एम्बेड कर सकते हैं?

कृपया बताएं कि आप किसके बारे में बात कर रहे हैं (एच 2 या एचएसक्यूएलडीबी) यदि आपके पास उनमें से किसी एक के लिए विशिष्ट उत्तर है।

उत्तर

46

आप अपने आवेदन के भीतर एच 2 web server चला सकते हैं जो एक ही मेमोरी डेटाबेस में पहुंच जाएगा। आप SquirrelSQL जैसे किसी जेनेरिक जेडीबीसी क्लाइंट का उपयोग कर सर्वर मोड में चल रहे एच 2 तक भी पहुंच सकते हैं।

अद्यतन:

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 के द्वारा अपने डेटाबेस से कनेक्ट या localhost:8082 का उपयोग कर foo_db डेटाबेस ब्राउज़ कर सकते हैं। दोनों सर्वर बंद करना याद रखें। यह भी देखें: H2 database in memory mode cannot be accessed by Console

तुम भी वसंत का उपयोग कर सकते हैं:

<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 आप केवल मैनुअल डेटाबेस सामग्री देखना पर नहीं कथनों पर निर्भर करते हैं और चाहिए। समस्या निवारण के लिए इसका उपयोग करें।

एनबी। यदि आप स्प्रिंग टेस्ट फ्रेमवर्क का उपयोग करते हैं तो आपको चल रहे लेनदेन द्वारा किए गए परिवर्तन नहीं दिखाई देंगे और यह लेनदेन परीक्षण के तुरंत बाद वापस ले जाया जाएगा।

+2

मैं त्रुटि है कि "सही" अमान्य विकल्प है मिल गया में इस गयी। क्या -webAllowOthers पैरामीटर लेने के लिए इस्तेमाल किया? नवीनतम एच 2 कोड के साथ, यह कोई पैरामीटर नहीं लेता है। यहां "मुख्य" विधि देखें: http://www.h2database.com/javadoc/org/h2/tools/Server.html – hshib

+1

हमन का उल्लेख किया गया है, नवीनतम संस्करण "सत्य" पैरामीटर स्वीकार नहीं करता है इसलिए इसे हटाएं: '< कन्स्ट्रक्टर-Arg value = "- वेब, -webAllowOthers, -webPort, 8082" /> ' –

+1

नए संस्करण ' सर्वर के अलग-अलग तर्क सम्मेलन का पालन करते हैं।createTcpServer ("- tcpPort", "9092", "-tcpAllowOthers") ' 'सर्वर .createWebServer (" - वेबपोर्ट "," 8082 "," -tcpAllowOthers ")' – Jor

4

एचएसक्यूएलडीबी के साथ, आपके पास कई अंतर्निहित विकल्प हैं।

डेटाबेस में दो जीयूआई डेटाबेस प्रबंधक और कमांड लाइन इंटरफ़ेस हैं। इन के लिए वर्ग हैं:

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 
24

एच 2 के लिए, आप आप एक डेटाबेस कनेक्शन वस्तु हो सकता है start a web server within your code एक डिबगिंग सत्र के दौरान यदि। आप अपने कोड में यह पंक्ति जोड़ सकता है, या कोई 'विशेष' अभिव्यक्ति (गतिशील) के रूप में:

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

सर्वर उपकरण एक वेब ब्राउज़र स्थानीय स्तर पर है कि आप डेटाबेस का उपयोग करने की अनुमति देता शुरू कर देंगे।

+2

उन लोगों के लिए टिप्पणी जो वसंत डेटा का उपयोग कर रहे हैं - आप से कनेक्शन प्राप्त कर सकते हैं इस तरह से एप्लीकेशनकॉन्टेक्स्ट: ((डेटासोर्स) context.getBean ("डेटासोर्स"))। GetConnection() – Odysseus

+0

यह जुनीट टेस्टवॉचर @ नियम – weberjn

+1

में भी बहुत अच्छा है, यह डिबगिंग करते समय इंटेलिजे में "मूल्यांकन एक्स्प्रेशन" के साथ इसे लॉच करने पर भी काम करता है। (बंद होने तक बाकी की घड़ी को लॉक करता है) – borjab

1

HSQLDB के लिए, मेरे लिए काम किया है:

DatabaseManager.threadedDBM(); 

और यह अपनी तालिका और डेटा के साथ जीयूआई को लाया।

मैंने स्विंग संस्करण की भी कोशिश की, लेकिन इसमें केवल main था, और मुझे पास होने के तर्कों से अनिश्चित था। अगर कोई जानता है, तो कृपया यहां पोस्ट करें।

सिर्फ इसलिए कि मैंने सही डेटाबेस नाम के लिए घंटों की खोज की: डेटाबेस का नाम आपके डेटा स्रोत का नाम है। तो URL jdbc के साथ प्रयास करें: hsqldb: mem: dataSource यदि आपके पास id = dataSource के साथ डेटा स्रोत बीन है। यदि यह काम नहीं करता है, तो testdb का प्रयास करें जो डिफ़ॉल्ट है।

+2

org.hsqldb.util.DatabaseManagerSwing.main (नया स्ट्रिंग [] {"- url", यूआरएल, "--user", USERNAME, "--password", PASSWORD}) ; –

7

एच 2 में, क्या मेरे लिए काम करता है:

मैं कोड, जैसे सर्वर शुरू कर:

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

localhost पोर्ट पर सर्वर शुरू होता है यही कारण है कि 9092.

तब कोड में, निम्नलिखित जेडीबीसी यूआरएल पर एक डीबी कनेक्शन स्थापित करें:

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

डेब ugging, के रूप में एक ग्राहक डीबी मैं एच 2, जो काफी अच्छा है द्वारा प्रदान की एक का उपयोग का निरीक्षण करने के लिए, यह शुरू करने के लिए आप सिर्फ अलग

org.h2.tools.Console 

यह एक साथ एक वेब सर्वर शुरू कर देंगे निम्नलिखित जावा मुख्य लांच करने की जरूरत है 8082 पर अनुप्रयोग, localhost:8082

पर एक ब्राउज़र शुरू और फिर आप डीबी

3

आप एक JMX सुविधा, startable JConsole के माध्यम से के रूप में यह दिखा सकता है देखने के लिए पिछले URL दर्ज कर सकते हैं:

@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 /> 
+2

यह वास्तव में एक अच्छी चाल है! – jplandrain

2

यह एक प्ले 2 एच 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 <[email protected]> 
*/ 
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"); 
     } 
    } 
} 
1

मैं (inMemory को एच 2 संस्करण 1.4.190 दूरस्थ कनेक्शन के साथ एक समस्या है साथ ही फाइल में) Connection is broken: "unexpected status 16843008" के साथ 1.3.176 तक डाउनग्रेड न करें। देखें Grails accessing H2 TCP server hangs

0

मुझे नहीं पता कि यह आपकी मशीनों पर ठीक क्यों काम कर रहा है, लेकिन मुझे यह काम करने के लिए एक दिन बिताना पड़ा।

सर्वर url "jdbc: h2: tcp: // localhost: 9092/~/default" के माध्यम से इंटेलिज आइडिया यू के साथ काम करता है।

ब्राउज़र में अन्य "स्थानीयहोस्ट: 8082" ठीक काम करता है।

मैं MVC-डिस्पैचर-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> 
संबंधित मुद्दे