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


85

Javaを使用してMSAccessで作成されたデータベースに接続しようとしていますが、管理できないようです。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);
        }
    }
}

2
64ビットのjv​​mを使用していますか?その場合は、64ビットのodbcドライバーが必要です。
dogbane 2012年

1
はい、私はそうだと思います。C:\ Windows \ SysWOW64で64ビットバージョンのodbcを見つけましたが、コントロールパネルがオンになっているものと同じではありません。
user1028408 2012年

他のオフィス製品が32ビットであるため64ビットドライバーをインストールできません:/
DavidVdd 2012年

回答:


128

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

c:\windows\system32\odbcad32.exe

そして32ビットバージョンはここにあります:

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

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


64ビット版を試し、管理者として実行しましたが、動作しません!!
Fatima Zohra 2012

2
ビットハーモニーが必要です。アプリが32の場合、32ビットの構成が必要です。アプリが64の場合は、64である必要があります。同期が取れないようにしたくないため(両方を同時に変更するのを忘れたため)、同じ名前の構成を作成しようとしませんでした。あなたは私に提案を提供しようとするのに十分な情報を与えませんでした。私はあなたがそれを理解したことを望みます。(なぜ彼らはとても単純なことをして、64ビット環境と32ビット環境の両方を構成する1つの64ビットアプリを作成できないのですか?)
Pecos Bill

そして、以下で述べたように、まだ明らかではありませんが、適切なアーキテクチャでない場合はドライバを選択できないと思いますが、関係するドライバも一致する必要があります(おそらく32と64の両方をインストールするのが最適です)。
ペコスビル2013

これは、32ビットExcelが64ビットCloudea HiveODBCドライバーを使用してHadoopHiveサーバーに接続できなかった理由を理解するのにも役立ちました。32ビットコネクタに切り替えると、うまくいきました!
Mark Vickery 2014年

2
明確にするために、64ビットシステムでは通常のWindowsGUIを介して32ビットPostgreSQLODBC接続をセットアップすることはできません。代わりに、ODBCデータソースアドミニストレータを閉じ(現在開いている場合)、c:\windows\sysWOW64\odbcad32.exeそこから接続を実行して構成する必要があります。その後、32ビットプログラムでその接続を使用してデータベースにアクセスできます。
ajedi32 2015年

26

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

  1. 使用しているODBCドライバーのビットバージョン
  2. セットアップに使用したODBCマネージャーのビットバージョン。

64ビットWindowsシステムでMS-AccessをMySQLに接続しようとしている方のために、MS-Access2010とMS-Access2013の両方でMS-Accessを動作させるために、私はひどい拷問を受けました。ついに動作しました。その過程で私が学んだ教訓:

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

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

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


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

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

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

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

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

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

    c:\ windows \ sysWOW64 \ odbcad32.exe

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

    ちなみに、ODBCマネージャーの64ビットバージョンは、次のように明示的に実行することもできます。

    c:\ windows \ system32 \ odbcad32.exe

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


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


2
2つのODBCマネージャーのパスを切り替えたと思います32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
Jrgns 2014

3
@Jrgnsいいえ、切り替えられません。sysWOW64実際には32ビットディレクトリです。Windowsは混乱するのが大好きです。ODBCデータソースアドミニストレータのタイトルバーに(32ビット)または(64ビット)が表示されるため、使用しているバージョンがわかります。
ティムリーフ2017年

8

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

これを見る

修正:アーキテクチャによって異なります。

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

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


ダウンロードして、手順で指定されている新しい接続文字列を試しましたが、それでも機能しませんでした。多分私は何か間違ったことをしているのですか?
user1028408 2012年

2

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

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

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

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

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

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

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


こんにちはBineeshKumarは、簡単に説明していただけますか
Raj Kumar

2

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


2

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


1

直面している問題は、Office32ビットとコマンドプロンプト64ビットを使用していたことが原因である可能性があります。この問題を解決するには、次の2つの手順に従う必要があります。

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

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

これがお役に立てば幸いです。


1

少し遅れましたが、同じ問題が発生したため、正確なシナリオで、ソリューションを追加すると思いました。

Windows 7(64ビット)とOffice 2010(32ビット)を使用しています。DSNなしの接続文字列で試しました:

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

そして、ODBC管理者のSystem32バージョンとSysWOW64バージョンの両方を使用してDSN接続を試しましたが、いずれも機能しませんでした。

最終的に機能したのは、JavaのビットバージョンをOfficeのビットバージョンと一致させることでした。それを行うと、DSNまたはDSNレス接続モードのいずれかを手間をかけずに使用できます。


私はこれをMobの答えから暗示しましたが、確認してくれてありがとう。なんてめちゃくちゃ!
Kevin Bowersox 2014年

0

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


C:\ Windows \ SysWOW64にあるODBCを使用してDSNを作成しました...コントロールパネルにあるものには、SQLサーバー用のドライバーを保存するドライバーがほとんどありませんでした。
user1028408 2012年

次に、ドライバをインストールする必要があります。これらのドライバがないと、ODBC接続を確立できないためです。
アンクルジャイン2012

これらのドライバーへのリンクはありますか?いくつかインストールしてみましたが、うまくいきませんでした。
user1028408 2012年


これらをダウンロードして、接続文字列を置き換えました:Connection dbConnection = DriverManager.getConnection( "Driver = {Microsoft Access Driver(*。mdb、* .accdb)}; DBQ = C:\\ Users \\ Owner \\ Documents \\ myDatabase .mdb "、" admin "、" "); しかし、それでも私には問題があります。たぶん私はコード内の何かを変更する必要がありますか?
user1028408 2012年

0

netbeansを使用している場合は、tools-> java Platformに移動し、c:/ programfiles / java / jdk1_7を指すjdk_homeをc:programFiles(x86)/ java / jdk1_6_21に変更します。

編集できない場合は、netbeans.cnfを見つけて、jdk_homeについて前述したように変更を加えます。neatbeansを再起動し、それがどのように機能するか私は同じ問題を抱えていましたが、私は働きました。


0

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


0

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


0

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

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

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


0

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

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

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

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

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

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

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

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


0

エラーを修正しました。

手順に従ってください:

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

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

それとベストラックを実行します。Windows7と8で動作します

問題が解決しない場合は、新しいバージョンのMS-Officeを削除し、MS-Office2007のみをインストールしてください


0

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


0

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

アーキテクチャのミスマッチについては、

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

その後、あなたの良い行きます。

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



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.