ODBCなしでJavaからAccessデータベースを操作する


114

JavaプロジェクトからMicrosoft Accessデータベース(.accdbまたは.mdbファイル)を操作したい。次の理由により、MicrosoftのJDBC-ODBCブリッジとAccess ODBCドライバーを使用したくありません。

  • JDBC-ODBCブリッジはJava SE 8から削除され、サポートされていません(ref:here)。
  • テキストにコードポイントがU + 00FF(参照:ここ)のUnicode文字が含まれている場合、JDBC-ODBCブリッジはAccess ODBCドライバーで正しく機能しないため、このような設定ではギリシャ語、ロシア語、中国語などの文字を処理できません。 、アラビア語など
  • MicrosoftのAccess ODBCドライバーはWindowsでのみ機能します。
  • 32ビット版と64ビット版のAccessデータベースエンジン(およびODBCドライバー)が別々にあり、展開が面倒な場合があります。

UCanAccessという名前のAccessデータベース用のJDBCドライバーについて言及している他の回答を見てきました。このアプローチを使用するようにJavaプロジェクトを設定するにはどうすればよいですか?

(JavaからAccessデータベースを使用するより良い方法を提案する回答も大歓迎です。)


ゴッド私はあなたと連絡を取りたいと思います。メールアドレス、それは可能ですか?乾杯
bonCodigo 14年

jre8でもjre7のjdbc odbcクラスを使用できます-stackoverflow.com/a/34617075/2110961を参照してください
フランクM.

回答:


160

UCanAccessは、ODBCを使用せずにAccessデータベースの読み取りと書き込みを可能にする純粋なJava JDBCドライバーです。他の2つのパッケージJackcessHSQLDBを使用して、これらのタスクを実行します。以下は、それをセットアップする方法の簡単な概要です。

 

オプション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:プロジェクトにJARを手動で追加する

上記のように、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

5つの JARをすべてプロジェクトに追加するだけです。

注:他の5つのJARファイルを追加する場合は、ビルドパスに追加しないでくださいloader/ucanload.jarUcanloadDriverクラスは、特殊な状況でのみ使用し、異なる設定が必要です。詳細については、関連する回答をここで参照してください。

Eclipse:パッケージエクスプローラーでプロジェクトを右クリックし、を選択しますBuild Path > Configure Build Path...。[外部JARを追加...]ボタンをクリックして、5つのJARをそれぞれ追加します。完了すると、Javaビルドパスは次のようになります。

BuildPath.png

NetBeans:プロジェクトのツリービューを展開し、[ライブラリ]フォルダを右クリックして[JAR /フォルダを追加...]を選択し、JARファイルを参照します。

nbAddJar.png

5つすべてのJARファイルを追加すると、「ライブラリ」フォルダは次のようになります。

nbLibraries.png

IntelliJ IDEA:File > Project Structure...メインメニューから選択します。[ライブラリ]ペインで[追加](+)ボタンをクリックし、5つのJARファイルを追加します。完了すると、プロジェクトは次のようになります。

IntelliJ.png

 

それでおしまい!

このようなコードを使用して、.accdbファイルと.mdbファイルのデータに "U Can Access"できるようになりました

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

 

開示

このQ&Aの執筆時点では、UCanAccessプロジェクトに関与したり、提携したりすることはありませんでした。使ったばかりです。それ以来、私はプロジェクトの貢献者になりました。


2
このライブラリとの提携はありますか?もしそうなら、それを開示する価値があるかもしれません。
Joe

これを使用して、Java 8でExcelワークブック(.xlsx)に接続できますか?
steinbitur 2014年

2
@sємsємドライバークラスはnet.ucanaccess.jdbc.UcanaccessDriver
Gord Thompson

1
@GordThompsonそれは素晴らしい答えです。クラス全体が、ファイルシステムの特権エラーであると信じてこの問題に悩まされていました。ロードに
役立ち

1
UcanAccesデータソースをJPAにHibernateおよびSpringと統合するのはどうですか?
Warren M. Nocos、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.