1. ホーム
  2. java

[解決済み] ODBCを使わずにJavaからAccessデータベースを操作する

2022-05-14 09:20:14

質問

Java プロジェクトから Microsoft Access データベース (.accdb または .mdb ファイル) を操作したいと思っています。私は、MicrosoftからのJDBC-ODBCブリッジとAccess ODBCドライバを使用したくないのですが、なぜでしょうか。

  • JDBC-ODBC Bridge は Java SE 8 から削除され、サポートされていない (参考文献: JDBC-ODBC Bridge は Java SE 8 から削除され、サポートされていない)。 ここで ),
  • テキストに U+00FF 以上のコード ポイントを持つ Unicode 文字が含まれる場合、JDBC-ODBC Bridge は Access ODBC ドライバと正しく動作しません (参考: JDBC-ODBC Bridge は Access ODBC ドライバと正しく動作しません。 ここで ) を含むテキストでは Access ODBC ドライバーを正しく動作させないため、このような設定ではギリシャ語、ロシア語、中国語、アラビア語などの文字を処理できません。
  • Microsoft の Access ODBC ドライバは Windows でのみ動作し、
  • Access Database Engine (および ODBC ドライバー) には 32 ビット版と 64 ビット版があり、展開の際に邪魔になることがある。

他の回答で、Access データベース用の JDBC ドライバーの名前に言及されているのを見たことがあります。 UCanAccess . この方法を使用するために、どのように私のJavaプロジェクトをセットアップすることができますか?

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

どのように解決するのですか?

UCanAccess は純粋なJava JDBCドライバで、ODBCを使用せずにAccessデータベースからの読み取りとAccessデータベースへの書き込みを可能にします。他に2つのパッケージを使用します。 Jackcess HSQLDB を使用して、これらのタスクを実行します。以下に、その設定方法を簡単に説明します。

オプション 1: 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-x.x.x.jar)です。

HSQLDB (hsqldb.jar, バージョン 2.2.5 またはそれ以降)

ジャックプロセス (jackcess-2.x.x.jar)

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をプロジェクトに追加するだけです。

注意 ではなく 追加 loader/ucanload.jar をビルドパスに追加してください。その際 UcanloadDriver クラスは特殊な状況でのみ使用され、別のセットアップが必要です。関連する回答を参照してください。 はこちら をご覧ください。

Eclipseです。 パッケージ・エクスプローラーでプロジェクトを右クリックし Build Path > Configure Build Path... . Add External JARs..."ボタンをクリックして、5つのJARをそれぞれ追加します。完了すると、Java Build Pathは次のようになります。

NetBeansです。 プロジェクトのツリービューを展開し、"Libraries"フォルダを右クリックして、"Add JAR/Folder..." を選択して、JAR ファイルを参照する。

5 つの JAR ファイルをすべて追加すると、quot;Libraries" フォルダーは次のような外観になるはずです。

IntelliJ IDEAです。 選択 File > Project Structure... を選択します。ライブラリ]ペインで[追加]ボタン( + ) ボタンをクリックして、5 つの JAR ファイルを追加します。これで、プロジェクトは次のようになります。

それだ!

これで、次のようなコードを使って、.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));
}

ディスクロージャー

この Q&A を書いている時点では、私は UCanAccess プロジェクトとは何の関係もなく、ただそれを使っていただけです。その後、私はこのプロジェクトの貢献者になりました。