การจัดการฐานข้อมูล Access จาก Java โดยไม่มี ODBC


114

ฉันต้องการจัดการฐานข้อมูล Microsoft Access (ไฟล์. accdb หรือ. mdb) จากโปรเจ็กต์ Java ของฉัน ฉันไม่ต้องการใช้ JDBC-ODBC Bridge และไดรเวอร์ Access ODBC จาก Microsoft เนื่องจาก:

  • JDBC-ODBC Bridge ถูกลบออกจาก Java SE 8 และไม่รองรับ (อ้างอิง: ที่นี่ ),
  • สะพาน JDBC-ODBC ทำงานไม่ถูกต้องกับไดรเวอร์ Access ODBC เมื่อข้อความมีอักขระ Unicode ที่มีจุดรหัสเหนือ U + 00FF (อ้างอิง: ที่นี่ ) ดังนั้นการตั้งค่าดังกล่าวจะไม่สามารถจัดการกับอักขระเช่นกรีกรัสเซียจีน , อาหรับ, ฯลฯ ,
  • ไดรเวอร์ Access ODBC จาก Microsoft ใช้งานได้ใน Windows เท่านั้นและ
  • มี Access Database Engine เวอร์ชัน 32 บิตและ 64 บิตแยกกัน (และไดรเวอร์ ODBC) ซึ่งอาจสร้างความรำคาญในการปรับใช้

ฉันได้เห็นคำตอบอื่น ๆ กล่าวขวัญไดรเวอร์ JDBC สำหรับการเข้าถึงฐานข้อมูลชื่อUCanAccess ฉันจะตั้งค่าโปรเจ็กต์ Java เพื่อใช้แนวทางนี้ได้อย่างไร

(คำตอบที่แนะนำวิธีที่ดีกว่าในการทำงานกับฐานข้อมูล Access จาก Java จะได้รับการต้อนรับมากที่สุด)


Gord ฉันต้องการติดต่อกับคุณ ที่อยู่อีเมลเป็นไปได้ไหม ไชโย
bonCodigo

คุณสามารถใช้คลาส jdbc odbc จาก jre7 ได้เช่นกันใน jre8 - ดู stackoverflow.com/a/34617075/2110961
Frank M.

คำตอบ:


160

UCanAccessเป็นไดรเวอร์ Java JDBC ที่ช่วยให้เราอ่านและเขียนไปยังฐานข้อมูล Access โดยไม่ต้องใช้ ODBC มันใช้แพ็คเกจอื่นอีกสองแพ็คเกจคือJackcessและHSQLDBเพื่อทำงานเหล่านี้ ต่อไปนี้เป็นภาพรวมคร่าวๆของวิธีการตั้งค่า

 

ตัวเลือกที่ 1: การใช้ Maven

หากโครงการของคุณใช้Mavenคุณสามารถรวม UCanAccess ผ่านพิกัดต่อไปนี้:

groupId: net.sf.ucanaccess
artifactId: ucanaccess

ต่อไปนี้เป็นข้อความที่ตัดตอนมาpom.xmlคุณอาจต้องอัปเดต<version>เพื่อรับรุ่นล่าสุด:

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

 

ตัวเลือกที่ 2: เพิ่ม JARs ลงในโปรเจ็กต์ของคุณด้วยตนเอง

ดังที่ได้กล่าวมาแล้ว UCanAccess ต้องการ Jackcess และ HSQLDB Jackcess ในทางกลับกันมีของตัวเองอ้างอิง ดังนั้นในการใช้ UCanAccess คุณจะต้องรวมส่วนประกอบต่อไปนี้:

UCanAccess (ucanaccess-xxxjar)
HSQLDB (hsqldb.jar เวอร์ชัน 2.2.5 หรือใหม่กว่า)
Jackcess (jackcess-2.xxjar)
commons-lang (commons-lang-2.6.jar หรือเวอร์ชัน2.x ที่ใหม่กว่า)
commons-logging ( 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

สิ่งที่คุณต้องทำคือเพิ่ม JAR ทั้งห้า (5) JAR ในโปรเจ็กต์ของคุณ

หมายเหตุ: อย่าได้เพิ่มloader/ucanload.jarการสร้างเส้นทางของคุณถ้าคุณกำลังเพิ่มอีกห้า (5) ไฟล์ JAR UcanloadDriverระดับจะใช้เฉพาะในกรณีพิเศษและต้องใช้การตั้งค่าที่แตกต่างกัน ดูคำตอบที่เกี่ยวข้องเพื่อดูรายละเอียดที่นี่

Eclipse:คลิกขวาโครงการในแพคเกจ Explorer Build Path > Configure Build Path...ที่และเลือก คลิกปุ่ม "Add External JARs ... " เพื่อเพิ่ม JAR ทั้งห้า (5) JAR เมื่อคุณทำ Java Build Path ของคุณเสร็จแล้วควรมีลักษณะดังนี้

BuildPath.png

NetBeans:ขยายมุมมองแบบต้นไม้สำหรับโครงการของคุณคลิกขวาที่โฟลเดอร์ "Libraries" และเลือก "Add JAR / Folder ... " จากนั้นเรียกดูไฟล์ JAR

nbAddJar.png

หลังจากเพิ่มไฟล์ JAR ทั้งห้า (5) ไฟล์แล้วโฟลเดอร์ "Libraries" ควรมีลักษณะดังนี้:

nbLibraries.png

IntelliJ IDEA:เลือกFile > Project Structure...จากเมนูหลัก ในบานหน้าต่าง "ไลบรารี" ให้คลิกปุ่ม "เพิ่ม" ( +) และเพิ่มไฟล์ JAR ห้า (5) ไฟล์ เมื่อเสร็จสิ้นโครงการควรมีลักษณะดังนี้:

IntelliJ.png

 

แค่นั้นแหละ!

ตอนนี้ "U Can Access" ข้อมูลในไฟล์. 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
คุณมีส่วนเกี่ยวข้องกับห้องสมุดนี้หรือไม่? อาจคุ้มค่าที่จะเปิดเผยหากคุณทำ
โจ

คุณสามารถใช้สิ่งนี้เพื่อเชื่อมต่อกับ Excel Workbook (.xlsx) ใน Java 8 ได้หรือไม่?
steinbitur

2
@ sємsємคลาสคนขับคือnet.ucanaccess.jdbc.UcanaccessDriver
Gord Thompson

1
@GordThompson นั่นคือคำตอบที่ดี ทั้งชั้นเรียนของฉันติดอยู่กับปัญหานี้โดยเชื่อว่าเป็นข้อผิดพลาดสิทธิ์ระบบไฟล์ ช่วยฉันโหลดและต้องใช้เวลาในการขุดเป็นจำนวนมากเพื่อให้ทราบว่า Oracle ทำสำเร็จด้วยสะพาน JDBC-ODBC จาก Java 8
wilbomc

1
วิธีการรวมแหล่งข้อมูล UcanAcces เข้ากับ JPA กับ Hibernate และ Spring
Warren M. Nocos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.