2013-03-03 6 views
8

पर एसक्लाइट डीबी जोड़ें मैं जावा (ग्रहण जूनो के साथ) का उपयोग कर रहा हूं और एक्जिक्यूटिव जेएआर फ़ाइल बनाने की कोशिश करता हूं जिसमें स्क्लाइट डीबी फ़ाइल शामिल है। मैं इस लाइन द्वारा डीबी के लिए कनेक्शन प्राप्त करने की कोशिश की है:एक्जिक्यूटेबल जेएआर फ़ाइल

DriverManager.getConnection("jdbc:sqlite:"+DataController.class.getResource("test.sqlite").getPath()) 

DataController एक वर्ग है कि स्थित जहां SQLite स्थित है।

और मैं कोई त्रुटि मिलती रखें:

java.sql.SQLException: invalid database address 

किसी की मदद के लिए और कैसे एक निष्पादन योग्य JAR फ़ाइल के अंदर SQLite डीबी शामिल करने के लिए के बारे में चरण दर चरण निर्देश दे सकते हैं करता है?

+0

यह त्रुटि तब होती है जब दिया गया डेटाबेस-URL अमान्य है। 'GetConnection() ' –

+0

पर दी गई स्ट्रिंग को प्रिंट करने का प्रयास करें, मैंने इसे पहले ही मुद्रित किया है और यह स्क्लाइट डीबी का सटीक पथ है। – gran33

उत्तर

10

स्पष्ट रूप से sqlite-jdbc संसाधनों को अपने आप खोल सकता है। इस धागे के अनुसार https://groups.google.com/forum/?fromgroups=#!topic/xerial/Oayzj5nrJGk, जोड़ें: पथ पर संसाधन। पैकेज इस फाइल में है '/' अलग पथ के साथ

DriverManager.getConnection("jdbc:sqlite::resource:package/test.sqlite"); 

की जगह पैकेज

जानते हैं कि यह वास्तव में एक tmp पर फ़ाइल की प्रतिलिपि करेंगे

directory.-: तो निम्न प्रयास करें।
+0

मैंने पढ़ा है कि jdbc का उपयोग कर: sqlite :: संसाधन: डीबी केवल पढ़ा जाता है। – Paolo

+0

यदि आपका डेटाबेस (जैसे मेरा) बस आपके प्रोजेक्ट की * संसाधन * निर्देशिका में है, तो निम्न कनेक्शन स्ट्रिंग पर्याप्त होगी: 'jdbc: sqlite :: resource: test.sqlite' या' jdbc: sqlite :: संसाधन: परीक्षण SQLite के आपके संस्करण के आधार पर .db'।मैंने इसे समझने की कोशिश करने में बहुत अधिक समय बिताया। यूआरआई के लिए 'संसाधन' जोड़ यह है कि यह क्या काम कर रहा है, क्योंकि इसके बिना, चालक मानता है कि आपका डीबी उसी निर्देशिका में है जो उस फ़ाइल से कनेक्ट हो रहा है। –

+0

मैं इसका अनुसरण करता हूं और एक अपवाद प्राप्त करता हूं java.sql.SQLException: संसाधन quanlythuchi3.sqlite नहीं मिला: java.net.MalformedURLException: कोई प्रोटोकॉल नहीं: MyDB.sqlite – Andiana

0

::resource रास्ता सही है। और यदि आप ::resource का उपयोग कर रहे हैं, तो इन स्पष्टीकरणों में सहायता मिलेगी, लेकिन अभी भी resource database.db not found: java.net.MalformedURLException: no protocol: database.db जैसे वर्डाना जैसी त्रुटियां प्राप्त होंगी।

सबसे आम anwsers हैं: DriverManager.getConnection("jdbc:sqlite::resource:path/to/database.db")

हालांकि path/to/database.db होना चाहिए सटीक पथ (रियल फाइल सिस्टम में पथ लेकिन जार में नहीं) अपने जार फाइल करने के लिए।

मैं getClass().getResource() उपयोग करने के लिए सलाह देते हैं:

DriverManager.getConnection("jdbc:sqlite::resource:" + 
     getClass().getResource("/path/to/db/in/the/jar/file")) 

नोट: /path/to/db/in/the/jar/file हिस्सा /

0

से प्रारंभ होना चाहिए मुझे यकीन है कि इस हाल JDBC संस्करणों में बदल गया है, तो नहीं कर रहा हूँ, लेकिन साथ नगण्य के बाद यह लगभग एक घंटे तक और विभिन्न अपवाद प्राप्त कर रहा है (MalformedURLException और "डेटाबेस बंद कर दिया गया है"), मैंने पाया कि निम्नलिखित मेरे लिए काम किया:

DriverManager.getConnection("jdbc:sqlite::resource:file:/path/to/database.db") 

: फ़ाइल: भाग अन्य उत्तरों से गायब प्रतीत होता है और मैं इसे बिना काम करने के लिए प्राप्त नहीं कर सका।

इसके अलावा, ध्यान दें कि

/path/to/database.db 

निरपेक्ष पथ नहीं बल्कि एक सामान्य संसाधन जड़ से .jar फ़ाइल की जड़ से शुरू है।

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