web-dev-qa-db-ja.com

ODBCを指定せずにJavaからAccessデータベースを操作する

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

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

私は CanAccess という名前のAccessデータベース用のJDBCドライバーについて言及している他の答えを見ました。この方法を使用するようにJavaプロジェクトを設定する方法を教えてください。

(JavaからAccessデータベースを操作するためのより良い方法を提案する回答もまた大歓迎です。)

108
Gord Thompson

CanAccess は、ODBCを使用せずにAccessデータベースの読み書きを可能にする純粋なJava JDBCドライバです。これらのタスクを実行するために、 JackcessHSQLDB の2つのパッケージが使用されます。以下は設定方法の概要です。

オプション1:Mavenを使う

あなたのプロジェクトが Maven を使っている場合は、次の座標でUCanAccessを含めることができます。

groupId:net.sf.ucanaccess
artifactId:ucanaccess

オプション2:プロジェクトにJARを手動で追加する

上記のように、UCanAccessにはJackcessとHSQLDBが必要です。同様にJackcessには独自の 依存関係 があります。そのため、UCanAccessを使用するには、以下のコンポーネントを含める必要があります。

CanAccess (ucanaccess-x.x.x.jar)
HSQLDB (hsqldb.jar、バージョン2.2.5以降)
Jackcess (jackcess-2.x.x.jar)
commons-lang (commons-lang-2.6.jar、またはそれ以降2.xバージョン
commons-logging (commons-logging-1.1.1.jar、またはそれ以降1.x version

幸いなことに、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(5)JARをプロジェクトに追加することだけです。

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

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

BuildPath.png

NetBeans:プロジェクトのツリービューを展開し、「Libraries」フォルダを右クリックして「Add JAR/Folder ...」を選択し、次に参照します。 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プロジェクトに関与も提携もしていませんでした。私はそれを使いました。私はそれ以来、プロジェクトへの貢献者になりました。

151
Gord Thompson