2011-02-16 24 views
6

के अंदर एमएस एक्सेस के लिए एक डीएसएन-कम कनेक्शन बनाना मैं एक डेस्कटॉप ऐप बना रहा हूं जिसे एमएस एक्सेस डेटाबेस के साथ संवाद करने की आवश्यकता है। अब, जब तक कि मैं डेस्कटॉप ऐप का उपयोग करने वाले प्रत्येक कंप्यूटर पर डेटाबेस के लिए डीएसएन पंजीकृत नहीं करना चाहता, मुझे डीएसएन-कम फैशन में डेटाबेस से कनेक्ट करने का एक तरीका चाहिए।जावा

मैंने बहुत कुछ खोजा है और how to create connection strings पर कुछ उपयोगी लिंक पाए हैं और इसके आधार पर मैंने अपने कार्यक्रम को संशोधित करने की कोशिश की लेकिन सफलता के बिना। नीचे दिया गया कोड विफल रहता है। अगर मैं getConnection में स्ट्रिंग को "jdbc: odbc: sampleDB" पर स्विच करता हूं, लेकिन यह डीएसएन का उपयोग कर रहा है और जो मैं प्राप्त करना चाहता हूं।

एमएस एक्सेस डेटाबेस में डीएसएन-कम कनेक्शन बनाने के लिए जावा में कनेक्शन स्ट्रिंग कैसे लिखूं और उपयोग करें?

private Connection setupConnection() throws ClassNotFoundException, 
     SQLException { 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    Connection con = DriverManager.getConnection("Driver={Microsoft Access Driver (*.mdb)} &_ Dbq=c:\\as\\sampleDB.mdb"); 
    return con; 
} 

अलावा: मैं यह भी कहना चाहते हैं कि किसी को भी एक तरह से प्राप्त करने के लिए क्या मैं एक DSN-कनेक्शन मैं खुशी यह बात सुनो जाएगा के साथ के लिए कहा की एक विचार है, तो!

jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\Nwind.mdb 

तो साथ की कोशिश:

उत्तर

5

JDBC कनेक्शन स्ट्रिंग के साथ jdbc: की तरह शुरू shouls jdbc:odbc:[alias], उदाहरण:

Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\\as\\sampleDB.mdb"); 

आप DSN कॉन्फ़िगर करते हैं तो आप सरल कनेक्ट स्ट्रिंग का उपयोग यह करने के लिए कनेक्ट कर सकते हैं:

jdbc:odbc:northwind 
+0

एक आकर्षण की तरह काम किया। आपका बहुत बहुत धन्यवाद! –

+0

[एच 2 डेटाबेस लिंक्ड टेबल] (http://www.h2database.com/html/grammar.html#create_linked_table) के लिए भी काम किया। – transistor1

1

मुझे यह समस्या भी थी और आदमी की कोशिश की यहाँ और विभिन्न मंचों पर सुझावों के वाई। आखिरकार, मैंने एक जगह से एक स्निपेट खोजा जिससे सफलतापूर्वक कनेक्ट हो गया और यह भी समझाया गया कि इनमें से कई पोस्ट क्यों काम नहीं करते हैं। देखें http://www.coderanch.com/t/295299/JDBC/databases/jdbc-odbc-DSN-connection-MS

मुद्दा यह है कि ओडीबीसी के अंत में कोलन के बाद अर्धविराम होना चाहिए जैसा कि jdbc: odbc:; driver =। यह जेडीबीसीओडीबीसी पुल पर ओरेकल दस्तावेज पढ़ने के बाद समझ में आया, जिसमें कहा गया है कि वाक्यविन्यास jdbc है: odbc: dsn; गुण ....... चूंकि हम एक डीएसएन की आपूर्ति नहीं कर रहे हैं, तो हमें समाप्त करने की जरूरत है; गुण जोड़ने से पहले।

मैं परीक्षण मैं एक विंडोज 7 अंतिम 32bit मशीन पर विभिन्न कनेक्शन तार के साथ भाग गया नीचे दिखा रहा हूँ:

 driver= (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 
     //jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ= does lookup to ODBC.ini to find matching driver 


      try { 
      connstr= "jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb) 
      conn= DriverManager.getConnection(connstr, "", ""); 
      stmt= conn.createStatement(); 
     } 
     catch (Exception e){} 
     try { 
      connstr= "jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb) 
      conn1= DriverManager.getConnection(connstr, "", ""); 
      stmt1= conn1.createStatement(); 
      dbmeta1=conn1.getMetaData(); 
     } 
     catch (Exception e){} 
     try { 
      connstr= "jdbc:odbc:MS Access Database;DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb) 
      conn2= DriverManager.getConnection(connstr, "", ""); 
      stmt2= conn2.createStatement(); 
      dbmeta2=conn2.getMetaData(); 
     } 
     catch (Exception e){} 
     try { 
      connstr= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb) 
      conn3= DriverManager.getConnection(connstr, "", ""); 
      stmt3= conn3.createStatement(); 
      dbmeta3=conn3.getMetaData(); 
     } 
     catch (Exception e){} 

stmt1 और stmt3 के बाद से कनेक्शन अशक्त हैं अशक्त हैं। stmt और stmt2 काम करते हैं। stmt2 आईबीएम टिवोली के लिए प्रलेखन में मिला एक कनेक्शन स्ट्रिंग का उपयोग करता है। यह काम करता है क्योंकि "एमएस एक्सेस डेटाबेस" ओडीबीसी रजिस्ट्री में मेरे कंप्यूटर पर उपयोगकर्ता डीएसएन के रूप में एक वैध शीर्षक है।

+0

आपको धन्यवाद! मैं बहुत निराश था, उचित कनेक्शन स्ट्रिंग की खोज कर रहा था। तीसरा एक मेरे लिए काम किया। – Jazz