Java'dan bir Access veritabanını ODBC olmadan değiştirme


114

Java projemden bir Microsoft Access veritabanını (.accdb veya .mdb dosyası) değiştirmek istiyorum. Microsoft'tan JDBC-ODBC Bridge ve Access ODBC sürücüsünü kullanmak istemiyorum çünkü:

  • JDBC-ODBC Bridge, Java SE 8'den kaldırılmıştır ve desteklenmemektedir (ref: burada ),
  • JDBC-ODBC Köprüsü, metin U + 00FF'nin (ref: burada ) üzerinde kod noktalarına sahip Unicode karakterler içerdiğinde Access ODBC sürücüsüyle düzgün çalışmaz , bu nedenle böyle bir kurulum Yunanca, Rusça, Çince gibi karakterleri işleyemez. , Arapça vb.
  • Microsoft'un Access ODBC sürücüsü yalnızca Windows'ta çalışır ve
  • Erişim Veritabanı Motorunun (ve ODBC sürücüsünün) ayrı 32-bit ve 64-bit sürümleri vardır ve bunlar dağıtım için sıkıntı yaratabilir.

UCanAccess adlı Access veritabanları için bir JDBC sürücüsünden bahseden başka yanıtlar da gördüm . Java projemi bu yaklaşımı kullanacak şekilde nasıl kurabilirim?

(Java'dan Access veritabanları ile çalışmanın daha iyi yollarını öneren yanıtlar da çok hoş karşılanacaktır.)


Gord sizinle temasa geçmek istiyorum. E-posta adresi, mümkün mü? Şerefe
bonCodigo

Jre7'deki jdbc odbc sınıflarını jre8'de de kullanabilirsiniz - bkz. Stackoverflow.com/a/34617075/2110961
Frank M.

Yanıtlar:


160

UCanAccess , ODBC kullanmadan Access veritabanlarından okuma ve yazma yapmamızı sağlayan saf bir Java JDBC sürücüsüdür. Bu görevleri gerçekleştirmek için Jackcess ve HSQLDB adlı diğer iki paketi kullanır . Aşağıda, nasıl kurulacağına dair kısa bir genel bakış yer almaktadır.

 

Seçenek 1: Maven'i Kullanma

Projenizde Maven kullanılıyorsa , aşağıdaki koordinatlar aracılığıyla UCanAccess'i dahil edebilirsiniz:

groupId: net.sf.ucanaccess
artifactId: ucanaccess

Aşağıdakilerden bir alıntıdır , en son sürümü almak pom.xmliçin güncellemeniz gerekebilir <version>:

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

 

Seçenek 2: JAR'ları projenize manuel olarak ekleme

Yukarıda belirtildiği gibi, UCanAccess Jackcess ve HSQLDB gerektirir. Jackcess'in de kendi bağımlılıkları vardır . Dolayısıyla, UCanAccess'i kullanmak için aşağıdaki bileşenleri eklemeniz gerekir:

UCanAccess (ucanaccess-xxxjar)
HSQLDB (hsqldb.jar, sürüm 2.2.5 veya daha yenisi)
Jackcess (jackcess-2.xxjar)
commons-lang (commons-lang-2.6.jar veya daha yeni 2.x sürümü )
ortak günlük kaydı ( commons-logging-1.1.1.jar veya daha yeni 1.x sürümü )

Neyse ki UCanAccess, gerekli tüm JAR dosyalarını dağıtım dosyasında içerir. Sıkıştırdığınızda şöyle bir şey göreceksiniz

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

Yapmanız gereken tek şey, projenize beş (5) JAR'ın tümünü eklemektir .

NOT: Do not eklemek loader/ucanload.jardiğer beş (5) JAR dosyalarını ekliyoruz eğer yapı yoluna. UcanloadDriverSınıf yalnızca özel durumlarda kullanılan ve farklı bir kurulum gerektirir. Ayrıntılar için ilgili cevaba buradan bakın.

Eclipse: Paket Gezgini'nde projeye sağ tıklayın ve seçin Build Path > Configure Build Path.... Beş (5) JAR'ın her birini eklemek için "Harici JAR Ekle ..." düğmesini tıklayın. Bitirdiğinizde, Java Derleme Yolunuz şöyle görünmelidir

BuildPath.png

NetBeans: Projeniz için ağaç görünümünü genişletin, "Kitaplıklar" klasörünü sağ tıklayın ve "JAR / Klasör Ekle ..." seçeneğini seçin, ardından JAR dosyasına göz atın.

nbAddJar.png

Beş (5) JAR dosyasının tümünü ekledikten sonra "Kitaplıklar" klasörü şuna benzer görünmelidir:

nbLibraries.png

IntelliJ IDEA: Seç File > Project Structure...ana menüden. "Kitaplıklar" bölmesinde "Ekle" ( +) düğmesini tıklayın ve beş (5) JAR dosyasını ekleyin. Bu yapıldıktan sonra proje şuna benzer görünmelidir:

IntelliJ.png

 

Bu kadar!

Artık .accdb ve .mdb dosyalarındaki "U Can Access" verilerine bunun gibi bir kod kullanarak

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

 

ifşa

Bu Soru-Cevap'ı yazdığım sırada UCanAccess projesiyle hiçbir ilgim veya bağlantım yoktu; Ben sadece kullandım. O zamandan beri projeye katkıda bulunuyorum.


2
Bu kütüphaneyle herhangi bir bağlantınız var mı? Bunu yaparsan açıklamaya değer olabilir.
Joe

Bunu Java 8'de bir Excel Çalışma Kitabına (.xlsx) bağlanmak için kullanabilir misiniz?
steinbitur

2
@ sємsєм Sürücü sınıfınet.ucanaccess.jdbc.UcanaccessDriver
Gord Thompson

1
@GordThompson Bu harika bir cevap. Tüm sınıfım, bunun bir dosya sistemi ayrıcalık hatası olduğuna inanarak bu soruna takıldı. Yükleme yapmama yardımcı oldu ve Oracle'ın Java 8'den JDBC-ODBC köprüsüyle
ortadan kalktığını

1
UcanAcces veri kaynağını Hibernate ve Spring ile JPA'ya entegre etmeye ne dersiniz?
Warren M.Nocos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.