1

UCanAccess を使用して、Mac OSX.8 の MS Access データベースからデータを読み取ろうとしています。UCanAccess の指示と、 Gord Tompson が StackOverflow answer で提供した指示に従って、すべてを設定したと思います。これは私が得ているエラーです:

スレッド「メイン」の例外 java.lang.IncompatibleClassChangeError: クラス com.healthmarketscience.jackcess.Database が見つかりましたが、インターフェイスが予期されていました

      net.ucanaccess.jdbc.DBReference で。(DBReference.java:149)
      net.ucanaccess.jdbc.DBReferenceSingleton.loadReference (DBReferenceSingleton.java:57) で
      net.ucanaccess.jdbc.UcanaccessDriver.connect (UcanaccessDriver.java:100) で
      java.sql.DriverManager.getConnection(DriverManager.java:582) で
      java.sql.DriverManager.getConnection(DriverManager.java:207) で
      openACCDB.OpenACCDB.main(OpenACCDB.java:13) で

私のビルドパスには以下が含まれます:

    commons-lang-2.6.jar
    commons-logging-1.1.1.jar
    hsqldb.jar
    jackcess-2.0.4.jar
    ucanaccess-2.0.8.jar
誰かアドバイスはありますか?私の理解では、UCanAccess と Jackcess はプラットフォームに依存しませんが、Mac OSX で実行するには、MS Jet エンジンに似たものを追加する必要がありますか?

これは私のコードです:

package openACCDB

import java.sql.*;
import java.io.File;

public class OpenACCDB {
    public static void main(String args[]) throws ClassNotFoundException, 
            SQLException {
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        String database = "/Users/george/Eclipse_Files/Java/GEOA_250/MyAccess.accdb";
        if ((new File(database)).exists()) {
            Connection conn = DriverManager.getConnection("jdbc:ucanaccess://"+database);
            Statement stmt = conn.createStatement();
            ResultSet rslt = stmt.executeQuery("SELECT [name] FROM [table1]");
            while (rslt.next())
                System.out.println(rslt.getString(1));
        }
        else System.out.println("The file "+database+"\n\tdoes not exist");
    }
}
4

1 に答える 1

1

クラスパス (jackcess1.xx) には、正しいもの以外に、競合する古い jackcess バージョンがあるようです: com.healthmarketscience.jackcess.Database は、jackcess2.0.0 以降のインターフェースです。そのjackcess1 jarを削除する必要があります。

于 2014-08-16T07:21:59.640 に答える