2010-05-04 16 views
9

मैं, स्मृति तालिका में एक बनाने एच 2 डेटाबेस का उपयोग कर, और JVM यह बनाई गई है के बाहर यह तक पहुँचने और में चल साथ समस्या हो रही हूँ।में स्मृति h2 टेबल, दूरस्थ कनेक्शन

प्रलेखन संरचनाओं यूआरएल के रूप में jdbc:h2:tcp://<host>/mem:<databasename>

मैंने कई संयोजनों की कोशिश की है, लेकिन बस काम से रिमोट कनेक्शन नहीं मिल सकता है। क्या यह सुविधा काम कर रही है, क्या कोई मुझे विवरण दे सकता है कि उन्होंने इसका उपयोग कैसे किया।

+0

अच्छा होगा यदि आपने किए गए संयोजन सूचीबद्ध किए हैं। –

+0

क्या आपको सर्वर सेट करने (कुछ टीसीपी पोर्ट सुनने के लिए) या क्लाइंट (सर्वर से कनेक्ट करने के लिए) में कोई समस्या है? –

उत्तर

10

आप In-Memory Databases पर देख सकते हैं। नेटवर्क कनेक्शन के लिए, आपको एक होस्ट और डेटाबेस नाम की आवश्यकता है। ऐसा लगता है कि आप चाहते हैं jdbc:h2:tcp://localhost/mem:db1 या jdbc:h2:tcp://127.0.0.1/mem:db1

2

सिर्फ इस समस्या मैंने पाया मैं TCP कनेक्शन के लिए JDBC यूआरएल के लिए DB_CLOSE_DELAY=-1 संलग्न करने के लिए की जरूरत का सामना करना पड़ा करने के बाद। तो मेरी यूआरएल थे:

  • याद में: jdbc:h2:mem:dbname
  • टीसीपी कनेक्शन: jdbc:h2:tcp://localhost:9092/dbname;DB_CLOSE_DELAY=-1

From the h2 docs:

डिफ़ॉल्ट रूप से, एक डेटाबेस के लिए पिछले कनेक्शन बंद करने बंद कर देता है डेटाबेस । इन-मेमोरी डेटाबेस के लिए, इसका मतलब है कि सामग्री गुम हो गई है। डेटाबेस को खोलने के लिए, ;DB_CLOSE_DELAY=-1 डेटाबेस URL पर जोड़ें।

DB_CLOSE_DELAY=-1 सहित यह नहीं है कि मैं टीसीपी के माध्यम से सही डेटाबेस से कनेक्ट नहीं कर सकता। कनेक्शन बनाया गया है, लेकिन यह एक निर्मित संस्करण में एक अलग संस्करण का उपयोग करता है (IFEXISTS=true पैरामीटर का उपयोग करके मान्य)

5

अब तक का कोई भी समाधान मेरे लिए काम नहीं करता है। रिमोट हिस्सा बस कनेक्ट नहीं हो सका।

किसी अन्य प्रक्रिया से या किसी अन्य कंप्यूटर से एक में स्मृति डेटाबेस का उपयोग करने के लिए, आप एक ही प्रक्रिया में एक TCP सर्वर शुरू करने की आवश्यकता के रूप में में स्मृति डेटाबेस बनाया गया था:

एच 2 के official documentation के अनुसार

। अन्य प्रक्रियाओं को तब डेटाबेस URL का उपयोग करके टीसीपी/आईपी या टीएलएस पर डेटाबेस तक पहुंचने की आवश्यकता होती है जैसे कि: jdbc: h2: tcp: // localhost/mem: db1।

मैंने बोल्ड में टेक्स्ट का महत्वपूर्ण हिस्सा चिह्नित किया।

और मैं एक काम कर समाधान इस आदमी के blog:

पहले प्रक्रिया में निम्न URL के साथ डीबी बनाने के लिए जा रहा है,:

jdbc:h2:mem:db1

और इसकी आवश्यकता जा रहा है एक टीसीपी सर्वर शुरू करने के लिए:

org.h2.tools.Server server = org.h2.tools.Server.createTcpServer().start();

अन्य प्रक्रियाओं तो निम्न URL का उपयोग करके अपने डीबी पहुँच सकते हैं:

"jdbc:h2:tcp://localhost/mem:db1"

और वह यह है! एक जादू की तरह काम किया!

संबंधित मुद्दे