ODBC के बिना जावा से एक्सेस डेटाबेस में हेरफेर


114

मैं अपने जावा प्रोजेक्ट से एक Microsoft Access डेटाबेस (.accdb या .mdb फ़ाइल) में हेरफेर करना चाहता हूं। मैं Microsoft से JDBC-ODBC ब्रिज और Access ODBC ड्राइवर का उपयोग नहीं करना चाहता क्योंकि:

  • JDBC-ODBC ब्रिज को जावा SE 8 से हटा दिया गया है और यह समर्थित नहीं है (Ref: यहाँ ),
  • JDBC-ODBC ब्रिज पहुँच ODBC ड्राइवर के साथ ठीक से काम नहीं करता है जब पाठ के ऊपर U + 00FF (संदर्भ: कोड अंकों के साथ यूनिकोड वर्ण शामिल यहाँ ), इसलिए इस तरह के एक सेटअप इस तरह के यूनानी, रूसी, चीनी के रूप में संभाल वर्णों के लिए सक्षम नहीं होगा , अरबी, आदि।
  • Microsoft से एक्सेस ODBC ड्राइवर केवल विंडोज में काम करता है, और
  • एक्सेस डेटाबेस इंजन (और ODBC ड्राइवर) के अलग-अलग 32-बिट और 64-बिट संस्करण हैं जो तैनाती के लिए एक उपद्रव हो सकते हैं।

मैंने अन्य उत्तरों को देखा है जो कि UCDAccess नाम के एक्सेस डेटाबेस के लिए JDBC ड्राइवर का उल्लेख करते हैं । मैं इस दृष्टिकोण का उपयोग करने के लिए अपनी जावा परियोजना कैसे स्थापित कर सकता हूं?

(जावा से एक्सेस डेटाबेस के साथ काम करने के बेहतर तरीके सुझाने वाले उत्तर भी सबसे स्वागत योग्य होंगे।)


गॉर्ड मैं आपसे संपर्क करना चाहूंगा। ईमेल पता, क्या यह संभव है? चीयर्स
bonCodigo

Jre7 से jdbc odbc कक्षाओं का उपयोग आप jre8 में भी कर सकते हैं - देखें stackoverflow.com/a/34617075/2110961
फ्रैंक एम।

जवाबों:


160

UCanAccess एक शुद्ध जावा JDBC ड्राइवर है जो हमें ODBC का उपयोग किए बिना एक्सेस डेटाबेस से पढ़ने और लिखने की अनुमति देता है। यह इन कार्यों को करने के लिए दो अन्य पैकेज, जैकस और एचएसक्यूएलडीबी का उपयोग करता है। निम्नलिखित इसे स्थापित करने के तरीके का एक संक्षिप्त अवलोकन है।

 

विकल्प 1: मावेन का उपयोग करना

यदि आपकी परियोजना मावेन का उपयोग करती है तो आप निम्नलिखित निर्देशांक के माध्यम से केवल UCanAccess को शामिल कर सकते हैं:

groupId: net.sf.ucanaccess
विरूपण साक्ष्य: ucanaccess

निम्नलिखित में से एक अंश है pom.xml, आपको <version>सबसे हालिया रिलीज़ पाने के लिए अद्यतन करने की आवश्यकता हो सकती है :

  <dependencies>
    <dependency>
        <groupId>net.sf.ucanaccess</groupId>
        <artifactId>ucanaccess</artifactId>
        <version>4.0.4</version>
    </dependency>
  </dependencies>

 

विकल्प 2: JAR को अपने प्रोजेक्ट में मैन्युअल रूप से जोड़ना

जैसा कि ऊपर उल्लेख किया गया है, UCanAccess के लिए Jackcess और HSQLDB की आवश्यकता है। बदले में जैक्स की अपनी निर्भरताएं हैं । तो UCanAccess का उपयोग करने के लिए आपको निम्नलिखित घटकों को शामिल करना होगा:

UCanAccess (ucanaccess-xxxjar)
HSQLDB (hsqldb.jar, संस्करण 2.2.5 या नया)
Jackcess (jackcess-2.xxjar)
commons-lang (कॉमन्स-लैंग-2.6- .jar, या नया 2.x संस्करण )
commons-logging ( कॉमन्स-लॉगिंग-1.1.1.jar, या नया 1.x संस्करण )

सौभाग्य से, UCanAccess अपनी वितरण फ़ाइल में सभी आवश्यक JAR फ़ाइलों को शामिल करता है। जब आप इसे अनज़िप करेंगे तो आपको कुछ दिखाई देगा

ucanaccess-4.0.1.jar  
  /lib/
    commons-lang-2.6.jar  
    commons-logging-1.1.1.jar  
    hsqldb.jar  
    jackcess-2.1.6.jar

आपको बस अपने प्रोजेक्ट में सभी पांच (5) JAR जोड़ने हैं ।

नोट: यदि आप अन्य पाँच (5) JAR फ़ाइलों को जोड़ रहे हैं तो अपने बिल्ड पथ में जोड़ें loader/ucanload.jarUcanloadDriverवर्ग केवल विशेष परिस्थितियों में उपयोग किया जाता है और एक अलग सेटअप करना आवश्यक है। संबंधित विवरण के लिए यहां देखें उत्तर ।

ग्रहण: पैकेज एक्सप्लोरर में परियोजना पर राइट-क्लिक करें और चुनें Build Path > Configure Build Path...। पांच (5) JAR में से प्रत्येक को जोड़ने के लिए "बाहरी जार जोड़ें ..." बटन पर क्लिक करें। जब आप अपने जावा बिल्ड पाथ को पूरा कर लेते हैं तो आपको कुछ इस तरह दिखना चाहिए

BuildPath.png

NetBeans: अपनी परियोजना के लिए ट्री व्यू का विस्तार करें, "लाइब्रेरीज़" फ़ोल्डर पर राइट-क्लिक करें और "Add JAR / Folder ..." चुनें, फिर JAR फ़ाइल में ब्राउज़ करें।

nbAddJar.png

सभी पाँच (5) को जोड़ने के बाद JAR "लाइब्रेरी" फ़ोल्डर को कुछ इस तरह दिखना चाहिए:

nbLibraries.png

IntelliJ विचार:File > Project Structure... मुख्य मेनू से चुनें । "पुस्तकालयों" फलक में "जोड़ें" ( +) बटन पर क्लिक करें और पांच (5) JAR फ़ाइलों को जोड़ें। एक बार परियोजना पूरी हो जाने के बाद इस तरह दिखना चाहिए:

IntelliJ.png

 

बस!

अब इस तरह के कोड का उपयोग करके .accdb और .mdb फाइलों में "यू कैन एक्सेस" डेटा कर सकते हैं

// assumes...
//     import java.sql.*;
Connection conn=DriverManager.getConnection(
        "jdbc:ucanaccess://C:/__tmp/test/zzz.accdb");
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("SELECT [LastName] FROM [Clients]");
while (rs.next()) {
    System.out.println(rs.getString(1));
}

 

प्रकटीकरण

इस प्रश्नोत्तर को लिखने के समय मुझे UCanAccess प्रोजेक्ट से कोई जुड़ाव या संबद्धता नहीं थी; मैंने अभी इसका इस्तेमाल किया है। मैं तब से परियोजना में योगदानकर्ता बन गया हूं।


2
क्या आपका इस लाइब्रेरी से कोई जुड़ाव है? यदि आप ऐसा करते हैं तो इसका खुलासा करने लायक हो सकता है।
जो

क्या आप जावा 8 में एक एक्सेल वर्कबुक (.xlsx) से कनेक्ट करने के लिए इसका उपयोग कर सकते हैं?
स्टीनबिटूर

2
@ s @мsєм ड्राइवर वर्ग हैnet.ucanaccess.jdbc.UcanaccessDriver
गॉर्ड थॉम्पसन

1
@GordThompson यह एक बेहतरीन जवाब है। मेरा पूरा वर्ग इस मुद्दे के साथ अटका हुआ था कि इसे फाइल सिस्टम विशेषाधिकार त्रुटि माना जाए। मुझे लोड करने में मदद की और इसमें जावा 8. से JDBC-ODBC पुल के साथ किए गए ओरेकल को महसूस करने के लिए खुदाई का एक आश्चर्यजनक राशि लिया गया
wilbomc

1
हाइबरनेट और स्प्रिंग के साथ जेपीए को UcanAcces डेटा स्रोत को एकीकृत करने के बारे में कैसे?
वॉरेन एम। नोकोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.