Memanipulasi database Access dari Java tanpa ODBC

114

Saya ingin memanipulasi database Microsoft Access (file .accdb atau .mdb) dari proyek Java saya. Saya tidak ingin menggunakan JDBC-ODBC Bridge dan Access ODBC driver dari Microsoft karena:

  • Jembatan JDBC-ODBC telah dihapus dari Java SE 8 dan tidak didukung (ref: di sini ),
  • Jembatan JDBC-ODBC tidak berfungsi dengan baik dengan driver Access ODBC ketika teks menyertakan karakter Unicode dengan poin kode di atas U + 00FF (ref: di sini ), jadi penyiapan seperti itu tidak akan dapat menangani karakter seperti Yunani, Rusia, Cina , Arab, dll.,
  • driver Access ODBC dari Microsoft hanya bekerja di Windows, dan
  • ada versi 32-bit dan 64-bit terpisah dari Access Database Engine (dan driver ODBC) yang dapat mengganggu penerapan.

Saya telah melihat jawaban lain yang menyebutkan driver JDBC untuk database Access bernama UCanAccess . Bagaimana cara menyiapkan proyek Java saya untuk menggunakan pendekatan ini?

(Jawaban yang menyarankan cara yang lebih baik untuk bekerja dengan database Access dari Java juga akan sangat disambut.)

Gord Thompson
sumber
Gord Saya ingin menghubungi Anda. Alamat email, apakah mungkin? Cheers
bonCodigo
Anda dapat menggunakan kelas odbc jdbc dari jre7 juga di jre8 - lihat stackoverflow.com/a/34617075/2110961
Frank M.

Jawaban:

160

UCanAccess adalah driver Java JDBC murni yang memungkinkan kita membaca dari dan menulis ke database Access tanpa menggunakan ODBC. Ini menggunakan dua paket lain, Jackcess dan HSQLDB , untuk melakukan tugas-tugas ini. Berikut ini adalah ikhtisar singkat tentang cara menyiapkannya.

 

Opsi 1: Menggunakan Maven

Jika proyek Anda menggunakan Maven, Anda cukup memasukkan UCanAccess melalui koordinat berikut:

groupId: net.sf.ucanaccess
artifactId: ucanaccess

Berikut ini adalah kutipan dari pom.xml, Anda mungkin perlu memperbarui <version>untuk mendapatkan rilis terbaru:

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

 

Opsi 2: Menambahkan JAR ke proyek Anda secara manual

Seperti disebutkan di atas, UCanAccess membutuhkan Jackcess dan HSQLDB. Jackcess pada gilirannya memiliki ketergantungannya sendiri . Jadi untuk menggunakan UCanAccess Anda perlu menyertakan komponen berikut:

UCanAccess (ucanaccess-xxxjar)
HSQLDB (hsqldb.jar, versi 2.2.5 atau yang lebih baru)
Jackcess (jackcess-2.xxjar)
commons-lang (commons-lang-2.6.jar, atau versi 2.x yang lebih baru )
commons-logging ( commons-logging-1.1.1.jar, atau versi 1.x yang lebih baru )

Untungnya, UCanAccess menyertakan semua file JAR yang diperlukan dalam file distribusinya. Saat Anda membuka ritsletingnya, Anda akan melihat sesuatu seperti

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

Yang perlu Anda lakukan adalah menambahkan kelima (5) JAR ke proyek Anda.

CATATAN: Jangan tidak menambahkan loader/ucanload.jaruntuk membangun jalan Anda jika Anda menambahkan file lima (5) JAR lainnya. The UcanloadDriverkelas hanya digunakan dalam keadaan khusus dan membutuhkan setup yang berbeda. Lihat jawaban terkait di sini untuk detailnya.

Eclipse: Klik kanan proyek di Package Explorer dan pilih Build Path > Configure Build Path.... Klik tombol "Tambah JAR Eksternal ..." untuk menambahkan masing-masing dari lima (5) JAR. Setelah Anda selesai, Path Build Java Anda akan terlihat seperti ini

BuildPath.png

NetBeans: Perluas tampilan struktur pohon untuk proyek Anda, klik kanan folder "Libraries" dan pilih "Add JAR / Folder ...", lalu telusuri file JAR.

nbAddJar.png

Setelah menambahkan kelima (5) file JAR, folder "Libraries" akan terlihat seperti ini:

nbLibraries.png

IntelliJ IDEA: Pilih File > Project Structure...dari menu utama. Pada panel "Libraries", klik tombol "Add" ( +) dan tambahkan lima (5) file JAR. Setelah selesai, proyek akan terlihat seperti ini:

IntelliJ.png

 

Itu dia!

Sekarang data "U Can Access" dalam file .accdb dan .mdb menggunakan kode seperti ini

// 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));
}

 

Penyingkapan

Pada saat menulis T&J ini, saya tidak terlibat atau berafiliasi dengan proyek UCanAccess; Saya baru saja menggunakannya. Sejak itu saya menjadi kontributor proyek.

Gord Thompson
sumber
2
Apakah Anda berafiliasi dengan perpustakaan ini? Mungkin layak untuk diungkapkan jika Anda melakukannya.
Joe
Bisakah Anda menggunakan ini untuk menyambungkan ke Buku Kerja Excel (.xlsx) di Java 8?
steinbitur
2
@ sємsєм Kelas pengemudi adalahnet.ucanaccess.jdbc.UcanaccessDriver
Gord Thompson
1
@GordThompson Itu adalah jawaban yang bagus. Seluruh kelas saya terjebak dengan masalah ini karena percaya itu adalah kesalahan hak istimewa sistem file. Membantu saya memuat dan butuh banyak penggalian yang mengejutkan untuk menyadari Oracle
meniadakan
1
Bagaimana mengintegrasikan sumber data UcanAcces ke JPA dengan Hibernate dan Spring?
Warren M. Nocos