Frage Der angegebene DSN enthält eine Architekturkonflikt zwischen dem Treiber und der Anwendung. JAVA


Ich versuche, eine Verbindung zu einer Datenbank herzustellen, die von MS Access mit Java erstellt wird, aber ich kann nicht verwalten. Ich verwende ODBC und erhalte diese Ausnahme:

java.sql.SQLException: [Microsoft] [ODBC-Treibermanager] Der angegebene DSN enthält eine Architekturübereinstimmung zwischen dem Treiber und der 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);
        }
    }
}

76
2018-01-17 13:56


Ursprung


Antworten:


Keiner von denen 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 gegenüber 64 Bits. Meine Lösung war herauszufinden, unter welcher App meine App läuft (Access) welches 2010 32b ist. Ich habe dies gefunden, indem ich auf der Registerkarte Prozess des Task-Managers nachgesehen habe, wo alle 32b-Prozesse das Ende ihrer Namen haben. Wie gesagt wurde, startet das Control Panel die 64 Bit-Version von ODBC von hier

c:\windows\system32\odbcad32.exe

und die 32-Bit-Version ist hier:

c:\windows\sysWOW64\odbcad32.exe (Am einfachsten zu kopieren und in den Laufdialog einzufügen)

Also habe ich DSNs mit den Namen 32 und 64 in jedem der entsprechenden ODBC-Kontrollfelder (AKA Administrator) eingerichtet, die auf dasselbe verweisen. Dann wählte ich den richtigen aus, je nachdem ob die App 32b oder 64b verwendet.


114
2017-09-21 19:59



Sie erhalten genau diesen Fehler, wenn Sie versuchen, eine Verbindung zu einer MySQL-Datenbank von MS-Access herzustellen, wenn die Bit-Version (32 vs 64) von Access nicht übereinstimmt

  1. die Bit-Version des ODBC-Treibers, den Sie verwenden
  2. die Bit-Version des ODBC-Managers, den Sie zum Einrichten verwendet haben.

Für diejenigen unter Ihnen, die MS-Access mit MySQL auf einem 64-Bit-Windows-System verbinden wollten, ging ich durch reine Folter, um es mit MS-Access 2010 und MS-Access 2013 zum Laufen zu bringen. Endlich funktionierte es, und hier sind die Lektionen, die ich auf dem Weg gelernt habe:

Ich kaufte ein neues Windows 7, 64-Bit-Laptop, und ich habe eine App, die auf MS-Access mit MySQL-Tabellen beruht.

  1. Ich habe die neueste Version von MySQL, 5.6, mit der All-in-One-Paket-Installation installiert. Auf diese Weise können Sie sowohl die Datenbank- als auch die ODBC-Treiber gleichzeitig installieren. Das ist nett, aber der ODBC-Treiber, der installiert wird, scheint der 64-Bit zu sein, also wird es nicht mit 32-Bit-MS-Access funktionieren. Es scheint auch ein bisschen buggy - nicht sicher auf diesem. Wenn Sie einen neuen DSN im ODBC-Manager hinzufügen, wird dieser Treiber als "Microsoft ODBC for Oracle" angezeigt. Ich konnte diesen hier nicht zur Arbeit bringen. Ich musste das 32 Bit installieren, das unten besprochen wird.

    • MySQL funktionierte nach der Installation gut. Ich habe meine Anwendung MySQL-Datenbank in der üblichen Weise wiederhergestellt. Jetzt möchte ich mit MS-Access verbinden.


  2. Ich hatte zuvor Office 2013 installiert, von dem ich annahm, dass es 64 Bit war. Aber beim Überprüfen der Version (Datei, Konto, About Access), sehe ich, dass es 32 Bit ist. Sowohl Access 2010 als auch 2013 werden meist als 32-Bit-Versionen verkauft.

  3. Meine Maschine ist eine 64-Bit-Maschine. Wenn Sie also standardmäßig Ihre DSNs für MS-Access einrichten und auf die übliche Weise über Systemsteuerung, Administrative Optionen in den ODBC-Manager wechseln, erhalten Sie den 64-Bit-ODBC-Manager. Das kannst du nicht wissen! Du kannst es einfach nicht sagen. Das ist ein riesiger Fall !! Es ist unmöglich, einen DSN von dort aus einzurichten und erfolgreich mit MS Access 32 Bit zu verbinden. Sie werden den gefürchteten Fehler bekommen:

    "Der angegebene DSN enthält eine Architekturabweichung ..."

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

    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 müssen stattdessen explizit den 32-Bit-ODBC-Manager mit diesem Befehl aufrufen, der am Start, der Eingabeaufforderung ausgeführt wird:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Ich habe eine Verknüpfung dazu auf meinem Desktop erstellt. Erstellen Sie von hier aus Ihren DSN mit diesem Manager. Wichtiger Punkt: ERSTELLEN SIE ALS SYSTEM DSNS, NICHT USER DSNS! Das hat mich 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. Nachdem 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 getestet.


Das tut es. Nachdem Sie Ihre DSNs im 32-Bit-ODBC-Manager definiert haben, können Sie auf gewohnte Weise eine Verbindung zu MySQL herstellen, indem Sie in Access - Externe Daten, ODBC-Datenbank, Link zur Datenbank, Maschinendatenquelle und den von Ihnen erstellten DSN auswählen Datenbank wird da sein.


23
2018-06-22 01:36



Es gibt ein Architektur-Missverhältnis. Ihr JDBC-Treiber und Ihr JDK sollten dieselbe Architektur haben. Wenn Sie 32-Bit-Treiber und Ihr JDK 64-Bit verwenden, erhalten Sie diesen Fehler.

Sehen Dies

Fix: Hängt von Ihrer Architektur ab.

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

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


8
2018-01-17 14:07



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


2
2017-07-08 05:28



Das Problem, dem Sie gegenüberstanden, könnte folgende sein: Sie hatten Office 32 Bit und Command Prompt 64 Bit. Um das Problem zu lösen, müssen Sie 2 Schritte folgen:

  1. Öffnen Sie ODBC Manager für DSN mit: C: \ Windows \ SysWOW64 \ odbcad32.exe Dies öffnet den ODBC Data Administrator für 32-Bit-Version und Sie werden alle Datenbanktreiber sehen.

  2. Danach müssen Sie die 32-Bit-Eingabeaufforderung öffnen mit: C: \ Windows \ SysWOW64 \ cmd.exe Dies öffnet die 32-Bit-Version der Eingabeaufforderung. In diesem neuen CMD kompilieren Sie bitte Ihr Java-Programm und führen Sie Ihr Programm aus.

Hoffe, das wird helfen.


1
2017-12-26 17:40



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

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

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

und ich versuchte es mit der DSN-Verbindung, wobei ich sowohl die System32- als auch die SysWOW64-Version des ODBC-Administrators verwendete, und nichts davon funktionierte.

Was schließlich funktionierte, war, die Bit-Version von Java mit der Bit-Version von Office abzugleichen. Sobald ich das getan habe, könnte ich entweder den DSN oder DSN less Verbindungsmodus verwenden, ohne viel Aufhebens.


1
2018-05-18 22:13



Ich habe diese Antwort gesehen und es hat für mich 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 bereitstellen. zum Beispiel Payroll oder Kreditorenbuchhaltung. 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-Datenquellen-Administrator aufgelistet. Die Dateidatenquellen in einem bestimmten Verzeichnis werden auf der Registerkarte Datei-DSN aufgelistet. Das anzuzeigende Verzeichnis wird im 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 Verwaltung auf einem 64-Bit-Windows 8-Betriebssystem gibt es Symbole für das 32-Bit- und das 64-Bit-ODBC-Datenquellen-Administrator-Dialogfeld.

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 Microsoft Access (* .mdb), wird folgende Fehlermeldung angezeigt:

Der angegebene DSN enthält eine Architekturkonflikt zwischen dem Treiber und der Anwendung

Um diesen Fehler zu beheben, verwenden Sie die 32-Bit-Datei odbcad32.exe, um den DSN zu konfigurieren oder zu entfernen.

Eine Datenquelle ordnet einem bestimmten ODBC-Treiber die Daten zu, auf die Sie über diesen Treiber zugreifen möchten. Sie können beispielsweise eine Datenquelle erstellen, um den ODBC dBASE-Treiber für den Zugriff auf eine oder mehrere dBASE-Dateien in einem bestimmten Verzeichnis auf Ihrer Festplatte oder einem Netzlaufwerk zu verwenden. Mit dem ODBC-Datenquellen-Administrator können Sie Datenquellen hinzufügen, ändern und löschen, wie in der folgenden Tabelle beschrieben.


1
2017-12-07 11:01



Haben Sie den DSN zuerst in Systemsteuerung> Verwaltung> ODBC> System-DSN erstellt. Benennen Sie das gleiche wie "myDatabase" und wenn Sie nach der Datenbank / Zugriffsdatei suchen, geben Sie den Pfad mit der Option browse ein. Sobald Ihr DSN erfolgreich erstellt wurde, können Sie problemlos auf Ihre DB zugreifen.


0
2018-01-17 14:09



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

wenn nicht editierbar Finden Sie netbeans.cnf und nehmen Sie die Änderung wie angegeben für jdk_home vor. Neustarten und wie es funktioniert Ich hatte das gleiche Problem, aber ich habe gearbeitet.


0
2018-06-07 04:46



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


0
2017-12-29 20:59



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


0
2018-04-04 17:30