Der angegebene DSN enthält eine Architekturinkongruenz zwischen Treiber und Anwendung. JAVA


85

Ich versuche, mit Java eine Verbindung zu einer von MS Access erstellten Datenbank herzustellen, kann diese jedoch scheinbar nicht verwalten. Ich verwende ODBC und erhalte diese Ausnahme:

java.sql.SQLException: [Microsoft] [ODBC-Treiber-Manager] Der angegebene DSN enthält eine Architekturinkongruenz zwischen Treiber und Anwendung

Mein 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
Verwenden Sie ein 64-Bit-JVM? In diesem Fall benötigen Sie einen 64-Bit-Odbc-Treiber.
Dogbane

1
Ja, ich denke ich bin. Ich habe die 64-Bit-Version des odbc in C: \ Windows \ SysWOW64 gefunden, aber es ist nicht dieselbe, die das Control Panel aktiviert.
user1028408

64-Bit-Treiber kann nicht installiert werden, da meine anderen Office-Produkte 32-Bit sind: /
DavidVdd

Antworten:


128

Keiner von diesen hat es für mich getan. Ich habe die Antwort auf MSDN gefunden. Es gab jedoch Hinweise darauf. Die Architektur im Fehler bezieht sich auf 32 vs 64 Bit. Meine Lösung bestand darin herauszufinden, welche App unter (Access) ausgeführt wird und 2010 32b ist. Ich fand dies, indem ich auf der Registerkarte "Prozess" des Task-Managers nachschaute, wo alle 32b-Prozesse * 32 das Ende ihrer Namen haben. Wie bereits erwähnt, startet das Control Panel von hier aus die 64- Bit-Version von ODBC

c:\windows\system32\odbcad32.exe

und die 32-Bit-Version ist hier:

c:\windows\sysWOW64\odbcad32.exe (am einfachsten zu kopieren und in den Ausführungsdialog einzufügen)

Also habe ich DSNs mit Namen eingerichtet, die in den entsprechenden ODBC-Kontrollfeldern (AKA Administrator) auf 32 und 64 enden und auf dasselbe verweisen. Dann habe ich die richtige ausgewählt, basierend darauf, ob die App, die sie verwendet, 32b oder 64b ist.


Ich hatte 64-Bit-Version versucht und es als Administrator ausgeführt, aber es funktioniert auch nicht!
Fatima Zohra

2
Es muss Bit-Harmonie geben. Wenn die App 32 ist, muss eine 32-Bit-Konfiguration vorhanden sein. Wenn die App 64 ist, müssen Sie eine 64 haben. Ich habe nicht versucht, Konfigurationen mit demselben Namen zu erstellen, weil ich nicht wollte, dass sie nicht mehr synchron sind (vergessen Sie, beide gleichzeitig zu ändern). Sie haben mir nicht genügend Informationen gegeben, um Vorschläge zu machen. Ich hoffe du hast es herausgefunden. (Warum können sie das nicht so einfach machen und eine 64-Bit-App erstellen, die sowohl 64- als auch 32-Bit-Umgebungen konfiguriert?)
Pecos Bill

Und wie unten angegeben, aber nicht offensichtlich, müssen auch die beteiligten Treiber übereinstimmen (wahrscheinlich am besten, um sowohl 32 als auch 64 zu installieren), obwohl ich nicht denke, dass Sie den Treiber auswählen können, wenn es nicht die richtige Architektur wäre.
Pecos Bill

Dies half mir auch zu entschlüsseln, warum mein 32-Bit-Excel mit dem 64-Bit-Cloudea-Hive-ODBC-Treiber keine Verbindung zu unserem Hadoop Hive-Server herstellen konnte. Sobald ich zum 32-Bit-Anschluss gewechselt habe, hat es super funktioniert!
Mark Vickery

2
Um es klar zu sagen: Sie können keine 32-Bit-PostgreSQL-ODBC-Verbindung über die normale Windows-GUI auf einem 64-Bit-System einrichten. Sie müssen stattdessen den ODBC-Datenquellenadministrator schließen (falls er derzeit geöffnet ist), c:\windows\sysWOW64\odbcad32.exedie Verbindung ausführen und von dort aus konfigurieren. Anschließend können Sie diese Verbindung später in einem 32-Bit-Programm verwenden, um auf die Datenbank zuzugreifen.
Ajedi32

26

Sie erhalten genau den gleichen Fehler, wenn Sie versuchen, von MS-Access aus eine Verbindung zu einer MySQL-Datenbank herzustellen, wenn die Bitversion (32 vs 64) von Access nicht übereinstimmt

  1. die Bit-Version des von Ihnen verwendeten ODBC-Treibers
  2. Die Bit-Version des ODBC-Managers, mit der Sie ihn eingerichtet haben.

Für diejenigen unter Ihnen, die versuchen, MS-Access auf einem 64-Bit-Windows-System mit MySQL zu verbinden, habe ich die Qualen durchgemacht, um zu versuchen, es sowohl mit MS-Access 2010 als auch mit MS-Access 2013 zum Laufen zu bringen. Endlich hat es funktioniert, und hier sind die folgenden die Lektionen, die ich auf dem Weg gelernt habe:

Ich habe einen neuen 64-Bit-Laptop für Windows 7 gekauft und habe eine App, die auf MS-Access mit MySQL-Tabellen basiert.

  1. Ich habe die neueste Version von MySQL, 5.6, mithilfe der All In One-Paketinstallation installiert. Auf diese Weise können Sie sowohl die Datenbank- als auch die ODBC-Treiber gleichzeitig installieren. Das ist schön, aber der installierte ODBC-Treiber scheint der 64-Bit-Treiber zu sein, sodass er mit 32-Bit-MS-Access nicht funktioniert. Es scheint auch ein wenig fehlerhaft zu sein - da bin ich mir nicht sicher. Wenn Sie im ODBC-Manager einen neuen DSN hinzufügen, wird dieser Treiber als "Microsoft ODBC For Oracle" angezeigt. Ich konnte diesen nicht zum Laufen bringen. Ich musste das 32-Bit installieren, das unten beschrieben wird.

    • MySQL funktionierte nach der Installation einwandfrei. Ich habe meine Anwendungs-MySQL-Datenbank auf die übliche Weise wiederhergestellt. Jetzt möchte ich mit MS-Access eine Verbindung herstellen.


  2. Ich hatte zuvor Office 2013 installiert, von dem ich annahm, dass es 64 Bit war. Beim Überprüfen der Version (Datei, Konto, Informationen zum Zugriff) stelle ich jedoch fest, dass es sich um 32-Bit handelt. Sowohl Access 2010 als auch 2013 werden am häufigsten als 32-Bit-Versionen verkauft.

  3. Mein Computer ist ein 64-Bit-Computer. Wenn Sie also standardmäßig Ihre DSNs für MS-Access einrichten und auf die übliche Weise über die Systemsteuerung, Verwaltungsoptionen, in den ODBC-Manager wechseln, erhalten Sie den 64-Bit-ODBC-Manager. Sie haben keine Möglichkeit, das zu wissen! Man kann es einfach nicht sagen. Das ist ein riesiger Fall !! Es ist unmöglich, von dort aus einen DSN einzurichten und eine erfolgreiche Verbindung zu MS Access 32 Bit herzustellen. Sie erhalten den gefürchteten Fehler:

    "Die angegebene dsn enthält eine Architekturinkongruenz ..."

  4. Sie müssen den 32-Bit-ODBC-Treiber von MySQL herunterladen und installieren. Ich habe Version 3.5.1 verwendet

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

  5. Sie müssen den ODBC-Manager in der Systemsteuerung anweisen, eine Wanderung durchzuführen, und stattdessen den 32-Bit-ODBC-Manager explizit aufrufen, wobei dieser Befehl an der Eingabeaufforderung Start, Eingabeaufforderung ausgeführt wird:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Ich habe auf meinem Desktop eine Verknüpfung dazu erstellt. Erstellen Sie von hier aus Ihren DSN mit diesem Manager. Wichtiger Punkt: BAUEN SIE SIE ALS SYSTEM-DSNS, NICHT ALS USER-DSNS! Das hat mich für eine Weile gestolpert.

    Übrigens kann die 64-Bit-Version des ODBC-Managers auch explizit wie folgt ausgeführt werden:

    c: \ windows \ system32 \ odbcad32.exe

  6. Wenn Sie den 32-Bit-ODBC-Treiber von MySql installiert haben und im ODBC-Manager auf Hinzufügen klicken, werden 2 Treiber aufgelistet. Wählen Sie "MySQL ODBC 5.2 ANSI-Treiber". Ich habe den UNICODE-Treiber nicht ausprobiert.


Das tut es. Nachdem Sie Ihre DSNs im 32-Bit-ODBC-Manager definiert haben, können Sie wie gewohnt über Access - Externe Daten, ODBC-Datenbank, Verknüpfung mit der Datenbank, Auswahl der Maschinendatenquelle und des von Ihnen für MySQL erstellten DSN eine Verbindung zu MySQL herstellen Datenbank wird da sein.


2
Ich denke, Sie haben die Wege für die beiden ODBC-Manager 32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
gewechselt

3
@ Jrgns Nein, sie sind nicht gewechselt. sysWOW64ist eigentlich das 32-Bit-Verzeichnis. Windows liebt es, verwirrend zu sein. Sie wissen, welche Version Sie verwenden, da sie in der Titelleiste des ODBC-Datenquellenadministrators (32-Bit) oder (64-Bit) angezeigt wird.
Tim Leaf

8

Es gibt ein Architekturinkongruenz. Ihr JDBC-Treiber und Ihr JDK sollten dieselbe Architektur haben. Wenn Sie einen 32-Bit-Treiber verwenden und Ihr JDK 64-Bit ist, wird dieser Fehler angezeigt.

Sehen Sie das

Fix: Hängt von Ihrer Architektur ab.

Sie benötigen 64-Bit-Treiber, wenn Ihr Java 64-Bit ist.

Download: http://www.microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=de


Ich habe es heruntergeladen und die neue Verbindungszeichenfolge ausprobiert, wie in der Anleitung angegeben, aber es hat immer noch nicht funktioniert. Vielleicht mache ich etwas falsch?
user1028408

2

Ich habe diese Antwort gesehen und sie hat bei mir funktioniert. https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

Nachdem Sie einen ODBC-Treiber aus dem Setup-Programm des Treibers installiert haben, können Sie eine oder mehrere Datenquellen dafür definieren. Der Datenquellenname (DSN) sollte eine eindeutige Beschreibung der Daten enthalten. Zum Beispiel Payroll oder Accounts Payable. Die Benutzer- und Systemdatenquellen, die für alle derzeit installierten Treiber definiert sind, werden auf den Registerkarten Benutzer-DSN oder System-DSN des Dialogfelds ODBC-Datenquellenadministrator aufgelistet. Die Dateidatenquellen in einem bestimmten Verzeichnis werden auf der Registerkarte Datei-DSN aufgelistet. Das anzuzeigende Verzeichnis wird in das Feld Suchen in auf der Registerkarte Datei-DSN eingegeben. System_CAPS_noteNote

Verwenden Sie c: \ windows \ sysWOW64 \ odbcad32.exe, um eine Datenquelle zu verwalten, die eine Verbindung zu einem 32-Bit-Treiber unter einer 64-Bit-Plattform herstellt. Verwenden Sie c: \ windows \ system32 \ odbcad32.exe, um eine Datenquelle zu verwalten, die eine Verbindung zu einem 64-Bit-Treiber herstellt. In den Verwaltungstools eines 64-Bit-Windows 8-Betriebssystems gibt es Symbole für das Dialogfeld 32-Bit- und 64-Bit-ODBC-Datenquellenadministrator.

Wenn Sie die 64-Bit-Datei odbcad32.exe zum Konfigurieren oder Entfernen eines DSN verwenden, der eine Verbindung zu einem 32-Bit-Treiber herstellt, z. B. Treiber für Microsoft Access (* .mdb), wird die folgende Fehlermeldung angezeigt:

Der angegebene DSN enthält eine Architekturinkongruenz zwischen Treiber und Anwendung

Verwenden Sie zum Beheben dieses Fehlers die 32-Bit-Datei odbcad32.exe, um den DSN zu konfigurieren oder zu entfernen.

Eine Datenquelle ordnet einen bestimmten ODBC-Treiber den Daten zu, auf die Sie über diesen Treiber zugreifen möchten. Beispielsweise können Sie eine Datenquelle erstellen, um mit dem ODBC-dBASE-Treiber auf eine oder mehrere dBASE-Dateien zuzugreifen, die sich in einem bestimmten Verzeichnis auf Ihrer Festplatte oder einem Netzwerklaufwerk befinden. Mit dem ODBC-Datenquellenadministrator können Sie Datenquellen hinzufügen, ändern und löschen, wie in der folgenden Tabelle beschrieben.


Hallo Bineesh Kumar könnte Ihr bitte Breafly erklären
Raj Kumar

2

Standardmäßig ist die Eingabeaufforderung mit System32 verbunden. Führen Sie eine 64-Bit-Eingabeaufforderung aus, z C:\WINDOWS\SYSWOW64\CMD.EXE. Kompilieren Sie daraufhin Ihre Java-Anwendung und führen Sie sie aus.


2

Um dieses Problem zu lösen, stellen Sie zunächst sicher, dass Ihre Java-Software eine 32-Bit-Version sein sollte. Wenn es sich eindeutig um eine 64-Bit-Version handelt, wird der Fehlanpassungsfehler angezeigt. Versuchen Sie daher, die 32-Bit-Version der Java-Version erneut zu installieren, und führen Sie das Java-Programm mit dem Befehl c: \ aus windows \ sysWOW64 \ odbcad32.exe (am einfachsten zu kopieren und in den Ausführungsdialog einzufügen) Das ist genug, damit Ihr Programm definitiv funktioniert


1

Das Problem, mit dem Sie konfrontiert waren, könnte sein: Sie hatten Office 32-Bit und Eingabeaufforderung 64-Bit. Um das Problem zu lösen, müssen Sie zwei Schritte ausführen:

  1. Öffnen Sie den ODBC-Manager für DSN mit: C: \ Windows \ SysWOW64 \ odbcad32.exe. Dadurch wird der ODBC-Datenadministrator für die 32-Bit-Version geöffnet und alle Datenbanktreiber angezeigt.

  2. Danach müssen Sie die 32-Bit-Eingabeaufforderung mithilfe von C: \ Windows \ SysWOW64 \ cmd.exe öffnen. Dadurch wird die 32-Bit-Version der Eingabeaufforderung geöffnet. In dieser neuen CMD kompilieren Sie bitte Ihr Java-Programm neu und führen Sie Ihr Programm aus.

Hoffe das wird helfen.


1

Ein bisschen spät, aber da ich in Ihrem genauen Szenario auf dasselbe Problem gestoßen bin, dachte ich, ich würde meine Lösung hinzufügen.

Ich habe Windows 7 (64-Bit) und Office 2010 (32-Bit). Ich habe es mit der DSN-freien Verbindungszeichenfolge versucht:

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

und ich habe versucht, mit der DSN-Verbindung sowohl die System32- als auch die SysWOW64-Version des ODBC-Administrators zu verwenden, und nichts davon hat funktioniert.

Was schließlich funktionierte, war, die Bitversion von Java mit der Bitversion von Office abzugleichen. Sobald ich das getan habe, konnte ich entweder den DSN- oder den DSN-freien Verbindungsmodus ohne viel Aufhebens verwenden.


Ich habe dies aus Mobs Antwort impliziert, aber danke für die Bestätigung. Was für ein Chaos!
Kevin Bowersox

0

Haben Sie den DSN zuerst in Systemsteuerung> Verwaltung> ODBC> System-DSN erstellt? Nennen Sie es den gleichen Namen wie "myDatabase". Wenn ich nach dem Auffinden der Datenbank / Zugriffsdatei fragen möchte, geben Sie den Pfad mit der Option "Durchsuchen" an. Sobald Ihr DSN erfolgreich erstellt wurde, können Sie problemlos auf Ihre Datenbank zugreifen.


Ich habe meinen DSN mit dem ODBC erstellt, den ich in C: \ Windows \ SysWOW64 gefunden habe ... Der in der Systemsteuerung hatte fast keine Treiber, außer denen für SQL Server.
user1028408

Dann müssen Sie die Treiber installieren, da Sie ohne diese Treiber keine ODBC-Verbindung herstellen können.
Ankur Jain

Haben Sie einen Link zu diesen Treibern? Ich habe versucht, einige zu installieren, aber sie haben nicht funktioniert.
user1028408


Ich habe diese heruntergeladen und die Verbindungszeichenfolge ersetzt: Verbindung dbConnection = DriverManager.getConnection ("Treiber = {Microsoft Access-Treiber (*. MDB, * .accdb)}; DBQ = C: \\ Benutzer \\ Eigentümer \\ Dokumente \\ myDatabase .mdb "," admin "," "); aber es macht mir immer noch Ärger. Vielleicht muss ich noch etwas im Code ändern?
user1028408

0

Wenn Sie Netbeans verwenden, gehen Sie zu tools-> java Platform und ändern Sie jdk_home, das auf c: / programfiles / java / jdk1_7 zeigt, in c: programFiles (x86) / java / jdk1_6_21

Wenn nicht bearbeitbar, suchen Sie netbeans.cnf und nehmen Sie die oben für jdk_home angegebenen Änderungen vor. Starten Sie Neatbeans neu und wie es funktioniert Ich hatte das gleiche Problem, aber ich habe gearbeitet.


0

Ich hatte große Probleme, von einem 64-Bit-Laptop unter Windows 7 mit MS Access 2010 eine Verbindung zu MySQL herzustellen. Ich fand den vorherigen Artikel sehr hilfreich, konnte aber mit odbc 3.5.1 immer noch keine Verbindung herstellen. Da ich zuvor einen 32-Bit-Computer mit Connector / ODBC 5.1.13 verbunden hatte, habe ich diese Version heruntergeladen und anhand der obigen Anweisungen eingerichtet. Erfolg. Die Antwort scheint zu sein, verschiedene Versionen von Connector.odbc auszuprobieren.


0

Wenn Sie mit einem 32-Bit-Treiber eine Verbindung von einer 64-Bit-Plattform herstellen, führen Sie die ausführbare Datei C: \ Windows \ SysWOW64 \ odbcad32.exe aus und erstellen Sie den DSN. Es wird klappen.


0

Beim Upgrade auf einen Windows 7-Server mit einigen älteren CLASP-Anwendungen ist dieses Problem aufgetreten. Versuch, eine 32-Bit-Anwendung auf einem 64-Bit-Computer auszuführen.

Versuchen Sie, die 32-Bit-Kompatibilität der Anwendungspools auf True zu setzen und / oder erstellen Sie DSNs in 32- und 64-Bit.

Öffnen Sie das odbc-Datenquellenfenster in beiden Versionen über die Ausführungsbox. C: \ Windows \ SysWOW64 \ odbcad32.exe C: \ Windows \ system32 \ odbcad32.exe


0

Ich bin auf dieses Problem gestoßen. Dies liegt an Ihrer Computerarchitektur und der von Ihnen verwendeten Datenbankarchitektur.

Wenn Sie ein 32-Bit-Betriebssystem verwenden, funktioniert alles gut, da Sie nur 32-Bit-Software installieren können. Das Problem tritt auf, wenn Sie das 64-Bit-Betriebssystem verwenden.

Um dieses Problem zu lösen, ist es einfach - ich habe lange gebraucht, um dieses Problem zu entdecken.

  1. Sie kennen Ihr Betriebssystem mit 64 Bit, Ihr Microsoft Office mit 32 Bit.
  2. Damit Sie mit NetBean IDE auf Ihre Datenbank zugreifen können (vorausgesetzt, Sie verwenden diese), müssen Sie 32-Bit-JDK installieren. Wenn Sie 64 Bit installiert haben, müssen Sie es deinstallieren und die 32 Bit installieren.

Sie können nicht auf Ihre Datenbank zugreifen, da Ihre 64-Bit-JVM nicht mit der 32-Bit-JVM identisch ist.

So fügen Sie Ihre Datenbank zu Ihrem System hinzu 1. Systemsteuerung 2. Administrator-Tools 3. Datenquelle (ODBC) Klicken Sie mit der rechten Maustaste darauf. Ändern Sie das Ziel in \ sysWOW64 \ odbcad32.exe. Ändern Sie den Start in r% \ SysWOW64

Dann solltest du laufen können. Informieren Sie mich, wenn Sie ein Problem damit haben.

Danke dir!


0

Ich habe den Fehler behoben.

Folge den Schritten:

  1. Installieren Sie das JDK der 32bt-Version
  2. Installieren Sie MS-Office 2007
  3. Konfigurieren Sie die Systemsteuerung: a. Systemsteuerung b. Administrator-Tools c. Datenquelle (ODBC)

    Klicken Sie mit der rechten Maustaste darauf, um das Ziel zu \sysWOW64\odbcad32.exeändern und den Start zu ändernr%\SysWOW64

Führen Sie es aus und viel Glück. Funktioniert sowohl in Windows 7 als auch in Windows 8

Entfernen Sie die neuere Version von MS-Office und installieren Sie nur MS-Office 2007, wenn das Problem weiterhin besteht


0

Um dieses Problem zu lösen, stellen Sie zunächst sicher, dass Ihre Java-Software eine 32-Bit-Version sein sollte. Wenn es sich eindeutig um eine 64-Bit-Version handelt, wird der Fehlanpassungsfehler angezeigt. Versuchen Sie daher, die 32-Bit-Java-Version erneut zu installieren, und führen Sie das Java-Programm im Befehl von c:\windows\sysWOW64\odbcad32.exe(am einfachsten zu) aus Kopieren und Einfügen in den Ausführungsdialog) Das ist genug, damit Ihr Programm definitiv funktioniert


0

Ich denke, das wird auch hilfreicher sein.

für das Architektur-Miss-Match,

Ich kopiere einfach die JDK-Datei aus der 32-Bit-Datei C: \ Programme (x86) \ Java \ jdk1.7.0_71 und füge sie dann in die 64-Bit-Datei C: \ Programme \ Java \ jdk1.7.0_10 ein Benennen Sie die Datei so um, dass sie mit der von Ihnen ersetzten Datei übereinstimmt, um den IDE-Fehler (Netbeans) zu vermeiden.

dann bist du gut zu gehen.

Hinweis: Sie sollten Ihre 64-Bit-Dateien sichern, damit Sie sie beim Erstellen einer 64-Bit-Anwendung an ihren Speicherort zurückgeben können


Hacky McHack Hack :(
Gareth

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.