web-dev-qa-db-ja.com

指定されたDSNには、ドライバーとアプリケーション間のアーキテクチャの不一致が含まれています。 JAVA

Javaを使用してMS Accessで作成されたデータベースに接続しようとしていますが、管理できないようです。私はODBCを使用していますが、この例外が発生しています:

Java.sql.SQLException:[Microsoft] [ODBC Driver Manager]指定されたDSNには、ドライバーとアプリケーション間のアーキテクチャの不一致が含まれています

私のJava:

package javaapplication2;

import Java.sql.Statement;
import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.ResultSet;
import Java.sql.SQLException;


/**
 *
 * @author Owner
 */
public class JavaApplication2 {

    /**
     * @param args the command line arguments
     * 
     */


    public static void main(String[] args) {
        // TODO code application logic here
        try {
            Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver");
            String sourceURL = new String("jdbc:odbc:myDatabase");
            System.out.println(sourceURL);
            Connection dbConnection = DriverManager.getConnection(sourceURL,"admin","");

            Statement myStmt  = dbConnection.createStatement();

            String query = "INSERT INTO People(ID, Name, Surname, Age, Contact, Location, Course) VALUES"
                    + " (1007, 'Elroy', 'Smith', '33', 21366688, 'Somewhere', 'somecourse')";

            myStmt.executeUpdate(query);

            ResultSet results = myStmt.executeQuery("SELECT * FROM People");

            while(results.next())
            {
                System.out.print(results.getString(1));
                System.out.print(results.getString(2));
                System.out.print(results.getString(3));
                System.out.println(results.getString(4));

            }

            results.close();

        }
        catch(ClassNotFoundException cnfe)
        {
            System.out.println(cnfe);
        }
        catch(SQLException sqle)
        {
            System.out.println(sqle);
        }
    }
}
80
user1028408

これらのどれも私のためにそれをしませんでした。 MSDNで答えを見つけました。しかし、それにヒントがありました。エラーのアーキテクチャは、32ビットと64ビットを参照しています。私の解決策は、どのアプリが(アクセス)の下でどの2010が32bで実行されているかを調べることでした。これは、すべての32bプロセスの名前の末尾が32であるタスクマネージャーの[プロセス]タブで確認できました。前述のように、コントロールパネルは、ここからODBCの-​​64ビットバージョンを起動します

c:\windows\system32\odbcad32.exe

32ビットバージョンは次のとおりです。

c:\windows\sysWOW64\odbcad32.exe(コピーして実行ダイアログに貼り付けるのが最も簡単です)

そこで、同じものを指す対応するODBCコントロールパネル(管理者)のそれぞれで、名前が32と64で終わるDSNをセットアップしました。次に、それを使用するアプリが32bか64bかに基づいて、正しいものを選択しました。

124
Pecos Bill

Accessのビットバージョン(32対64)が一致しない場合、MS-AccessからMySQLデータベースに接続しようとすると、まったく同じエラーが発生します。

  1. 使用しているODBCドライバーのビットバージョン
  2. 設定に使用したODBC Managerのビットバージョン。

64ビットWindowsシステムでMS-AccessをMySQLに接続しようとしている人のために、私はMS-Access 2010とMS-Access 2013の両方で動作するようにしようとする厳しい拷問を経験しました。途中で学んだ教訓:

新しいWindows 7、64ビットラップトップを購入し、MySQLテーブルを使用するMS-Accessに依存するアプリを使用しています。

  1. All In Oneパッケージインストールを使用して、最新バージョンのMySQL 5.6をインストールしました。これにより、データベースとODBCドライバーの両方を一度にインストールできます。それは素晴らしいことですが、インストールするODBCドライバーは64ビットのものであるように見えるため、32ビットMS-Accessでは動作しません。また、少しバグが多いように見えます-確かではありません。 ODBC Managerに新しいDSNを追加すると、このドライバーは「Microsoft ODBC For Oracle」と表示されます。これを動作させることができませんでした。以下で説明する32ビットの1つをインストールする必要がありました。

    • MySQLはインストール後に正常に機能していました。通常の方法でアプリケーションMySQLデータベースを復元しました。次に、MS-Accessを使用して接続します。


  2. 以前にOffice 2013をインストールしたことがありますが、64ビットと想定しました。しかし、バージョン(ファイル、アカウント、アクセスについて)を確認すると、32ビットであることがわかりました。 Access 2010と2013はどちらも、32ビットバージョンとして最も一般的に販売されています。

  3. 私のマシンは64ビットマシンです。したがって、デフォルトでは、MS-Access用にDSNをセットアップし、通常の方法でコントロールパネルの[管理オプション]を介してODBC Managerに移動すると、64ビットODBCマネージャー。あなたはそれを知る方法がありません!わかりません。これは大きな落とし穴です!!そこからDSNをセットアップして、MS Access 32ビットに正常に接続することは不可能です。恐ろしいエラーが表示されます:

    「指定されたdsnにアーキテクチャの不一致が含まれています...」

  4. MySQLから32ビットODBCドライバーをダウンロードしてインストールする必要があります。バージョン3.5.1を使用しました

    http://dev.mysql.com/downloads/connector/odbc/3.51.html

  5. コントロールパネルのODBC Managerにハイキングを行うよう指示し、代わりに32ビットODBC Managerを開始、コマンドプロンプトで実行されるこのコマンドで明示的に呼び出す必要があります。

    c:\ windows\sysWOW64\odbcad32.exe

    デスクトップにこれへのショートカットを作成しました。ここから、このマネージャーでDSNを構築します。重要なポイント:ユーザーDSNSではなく、システムDSNSとして構築してください!これはしばらく私をつまずかせました。

    ところで、ODBC Managerの64ビットバージョンは、次のように明示的に実行することもできます。

    c:\ windows\system32\odbcad32.exe

  6. MySqlから32ビットODBCドライバーをインストールしたら、ODBCマネージャーで[追加]をクリックすると、2つのドライバーが一覧表示されます。 「MySQL ODBC 5.2 ANSI Driver」を選択します。 UNICODEドライバーは試しませんでした。


それはそれを行います。 32ビットODBCマネージャーでDSNを定義したら、通常の方法でAccessからMySQLに接続できます-外部データ、ODBCデータベース、データベースへのリンク、選択マシンデータソース、およびMySQLデータベースに作成したDSNがそこにあります。

25
Azolla99

アーキテクチャの不一致があります。 JDBCドライバーとJDKは同じアーキテクチャーである必要があります。 32ビットドライバーを使用し、JDKが64ビットの場合、そのエラーが発生します。

this を参照してください

修正:アーキテクチャに依存します。

Javaが64ビットの場合、64ビットドライバーが必要になります。

ダウンロード: http://www.Microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=en

8
Mob

デフォルトでは、コマンドプロンプトはSystem32に接続されています。 64ビットコマンドプロンプト、つまりC:\WINDOWS\SYSWOW64\CMD.EXEを実行します。その中で、Javaアプリケーションをコンパイルして実行します。

2
sai

私はこの答えを見ました、そしてそれは私のために働きました。 https://msdn.Microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

ドライバーのセットアッププログラムからODBCドライバーをインストールしたら、1つ以上のデータソースを定義できます。データソース名(DSN)は、データの一意の説明を提供する必要があります。たとえば、給与または買掛金など。現在インストールされているすべてのドライバに対して定義されているユーザーおよびシステムデータソースは、[ODBC Data Source Administrator]ダイアログボックスの[ユーザーDSN]タブまたは[システムDSN]タブに一覧表示されます。特定のディレクトリ内のファイルデータソースは、[ファイルDSN]タブに一覧表示されます。表示されるディレクトリは、[ファイルDSN]タブの[探す場所]ボックスに入力されます。 System_CAPS_noteNote

64ビットプラットフォームで32ビットドライバーに接続するデータソースを管理するには、c:\ windows\sysWOW64\odbcad32.exeを使用します。 64ビットドライバーに接続するデータソースを管理するには、c:\ windows\system32\odbcad32.exeを使用します。 64ビットWindows 8オペレーティングシステムの管理ツールには、32ビットと64ビットの両方のODBC Data Source Administratorダイアログボックスのアイコンがあります。

64ビットodbcad32.exeを使用して、32ビットドライバーに接続するDSNを構成または削除する場合(たとえば、Driver do Microsoft Access(* .mdb))、次のエラーメッセージが表示されます。

指定されたDSNには、ドライバーとアプリケーション間のアーキテクチャの不一致が含まれています

このエラーを解決するには、32ビットodbcad32.exeを使用してDSNを構成または削除します。

データソースは、特定のODBCドライバーを、そのドライバーを介してアクセスするデータに関連付けます。たとえば、ODBC dBASEドライバーを使用して、ハードディスクまたはネットワークドライブ上の特定のディレクトリにある1つ以上のdBASEファイルにアクセスするデータソースを作成できます。 ODBC Data Source Administratorを使用して、次の表で説明するように、データソースを追加、変更、および削除できます。

1
Bineesh Kumar

この問題を解決するには、最初にJavaソフトウェアが32ビットバージョンであることを確認してください。64ビットバージョンである場合、不一致エラーが表示されるので、32ビットのJavaバージョンを再インストールし、c:\のコマンドでJavaプログラムを実行してくださいwindows\sysWOW64\odbcad32.exe(コピーして実行ダイアログに貼り付けるのが最も簡単です)プログラムが確実に動作するのに十分です

1
Raj Kumar

直面した問題は、Office 32ビットとコマンドプロンプト64ビットを使用していたためかもしれません。問題を解決するには、2つの手順に従う必要があります。

  1. C:\ Windows\SysWOW64\odbcad32.exeを使用してDSNのODBC Managerを開きます。これにより、32ビットバージョンのODBC Data Administratorが開き、すべてのデータベースドライバーが表示されます。

  2. この後、C:\ Windows\SysWOW64\cmd.exeを使用して32ビットコマンドプロンプトを開く必要があります。これにより、コマンドプロンプトの32ビットバージョンが開きます。この新しいCMDで、Javaプログラムを再コンパイルしてプログラムを実行してください。

これが役立つことを願っています。

1
Sumit Kathuria

少し遅れましたが、同じ問題に遭遇したので、あなたの正確なシナリオで、私は自分の解決策を追加すると思いました。

Windows 7(64ビット)とOffice 2010(32ビット)があります。 DSNなしの接続文字列で試しました。

jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=I:/TeamForge/ORS/CTFORS.accdb

そして、ODBC AdminのSystem32およびSysWOW64バージョンの両方を使用して、DSN接続を試みましたが、いずれも機能しませんでした。

最終的に機能したのは、JavaのビットバージョンとOfficeのビットバージョンを一致させることでした。それができたら、大騒ぎせずにDSNまたはDSNレス接続モードを使用できます。

1
Spencer Kormos

この問題を解決するには、まずJavaソフトウェアが32ビットバージョンであることを確認してください。64ビットバージョンである場合は、ミスマッチエラーが表示されるため、32ビットのJavaバージョンを再インストールし、c:\windows\sysWOW64\odbcad32.exe(最も簡単なコピーして実行ダイアログに貼り付けます)あなたのプログラムが確実に機能するのに十分です

0
Savu Rajkumar

32ビットドライバーを使用して64ビットプラットフォームから接続する場合は、実行可能ファイルC:\ Windows\SysWOW64\odbcad32.exeを実行してDSNを作成します。それが動作します。

0
Senthil

MS Access 2010を使用して、Windows 7を実行している64ビットのラップトップからMySQLにリンクするのに多くの問題がありました。以前にConnector/ODBC 5.1.13を使用して32ビットマシンをリンクしたので、そのバージョンをダウンロードし、上記の手順を使用してセットアップしました。成功。答えは、Connector.odbcのさまざまなバージョンを試すことです。

0
user2909327

これももっと役立つと思います。

建築ミスマッチの場合、

32ビットファイル‪C:\ Program Files(x86)\ Java\jdk1.7.0_71からjdkファイルをコピーし、64ビットファイル‪C:\ Program Files\Java\jdk1.7.0_10に貼り付けます。 IDEエラー(netbeans)を回避するために、置き換えるファイルに一致するようにファイル名を変更します

行ってよかった。

注:64ビットファイルをバックアップして、64ビットアプリケーションを作成するときに、その場所に戻すことができるようにしてください。

0
assenga priva

エラーを修正しました。

手順に従ってください:

  1. 32btバージョンのJDKをインストールする
  2. MS-Office 2007をインストールする
  3. コントロールパネルの構成:a。コントロールパネルb。管理者ツールc。データソース(ODBC)

    それを右クリックして、ターゲットを\sysWOW64\odbcad32.exeに変更し、開始をr%\SysWOW64に変更します

それと最高の運を実行します。 Windows 7および8で動作します

問題が解決しない場合は、新しいバージョンのMS-Officeを削除し、MS-Office 2007のみをインストールします

0
Nitesh Achhra

レガシーCLASPアプリケーションを使用してWindows 7サーバーにアップグレードするときに、この問題に遭遇しました。 64ビットマシンで32ビットアプリケーションを実行しようとしています。

アプリケーションプールの32ビット互換性をTrueに設定するか、32ビットまたは64ビットでdsnを作成してください。

実行ボックスから両方のバージョンのodbcデータソースウィンドウを開きます。 C:\ Windows\SysWOW64\odbcad32.exe C:\ Windows\system32\odbcad32.exe

0
user3183695

私はこの問題に遭遇しました。これは、コンピュータアーキテクチャと使用しているデータベースアーキテクチャが原因です。

32ビットオペレーティングシステムを使用している場合は、32ビットソフトウェアしかインストールできないため、すべて正常に動作します。 64ビットオペレーティングシステムを使用している場合に問題が発生します。

この問題を解決するために簡単です-私はこの問題を発見するのに長い時間がかかりました。

  1. オペレーティングシステムは64ビットですが、Microsoft Officeは32ビットです。
  2. したがって、NetBean IDEを使用してデータベースにアクセスするには(これを使用している場合)、32ビットJDKをインストールする必要があります。 64ビットをインストールした場合は、それをアンインストールして32ビットをインストールする必要があります。

64ビットJVMは32ビットJVMと同じではないため、データベースにアクセスできません。

データベースをシステムに追加するには1.コントロールパネル2.管理者ツール3.データソース(ODBC)を右クリックして、ターゲットを\ sysWOW64\odbcad32.exeに変更し、開始をr%\ SysWOW64に変更します。

その後、実行できるはずです。これに問題がある場合はお知らせください。

ありがとうございました!

0
Andrew

Netbeansを使用している場合は、ツール-> Javaプラットフォームに移動し、c:/ programfiles/Java/jdk1_7を指すjdk_homeをc:programFiles(x86)/ Java/jdk1_6_21に変更します

編集できない場合は、netbeans.cnfを見つけて、jdk_homeについて上記のように変更します。 neatbeansを再起動し、どのように動作するかは同じ問題でしたが、動作しました。

0
deepak

最初に[コントロールパネル]> [管理ツール]> [ODBC]> [システムDSN]でDSNを作成しました。 「myDatabase」と同じ名前を付け、データベース/アクセスファイルの場所を指定する場合は、参照オプションを使用してパスを指定します。 ur DSNが正常に作成されると、ur DBに簡単にアクセスできるようになります。

0
Ankur Jain