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);
}
}
}
Antworten:
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.
quelle
c:\windows\sysWOW64\odbcad32.exe
die 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.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
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.
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.
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.
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:
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
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:
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:
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.
quelle
32 bit: c:\windows\system32\odbcad32.exe
64 bit: c:\windows\sysWOW64\odbcad32.exe
sysWOW64
ist 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.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
quelle
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.
quelle
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.quelle
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
quelle
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:
Ö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.
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.
quelle
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:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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
quelle
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.
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!
quelle
Ich habe den Fehler behoben.
Folge den Schritten:
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
quelle
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 funktioniertquelle
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
quelle
Gehen Sie zu diesem Link und laden Sie den ODBC-Treiber für das 64-Bit-Betriebssystem herunter.
http://www.microsoft.com/en-us/download/details.aspx?id=13255
quelle