Troubles mit JDBC-ODBC, DSN Verbindung Strings und 64-Bit-Windows 7
-
25-09-2019 - |
Frage
Ich bin der Umgang mit einem Thema, das für eine Anwendung entstanden ist, ich habe auf gearbeitet, was eine Verbindung zu einer Access-Datei über JDBC-ODBC. Auf anderen Windows-Plattformen, hat dieses Problem nicht aufgetreten, aber auf Windows 7 64-Bit-Boxen, versuchen, mit DSN Verbindung Strings zu verbinden zurück:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
Mehrere Variationen auf der Saite versucht worden, aber alle haben die gleichen Fehler zurückgegeben. Hier ist, wie es zur Zeit versucht, eine Verbindung:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
StringBuffer databaseConnectionString;
if (SystemUtils.IS_OS_WINDOWS_7) {
databaseConnectionString = new StringBuffer("jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=");
databaseConnectionString.append(databaseFile);
} else {
databaseConnectionString = new StringBuffer("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=");
databaseConnectionString.append(databaseFile);
databaseConnectionString.append(";DriverID=22;READONLY=false}");
}
Die Untersuchung der Fahrer in der 32-Bit-ODBC-Datenquelle Admin bestätigt, dass die Treiber vorhanden sind. Wenn jedoch regedt32.exe verwendet wird, um die ODBC-Treiber (HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI/ODBC Drivers)
zu untersuchen, keiner von ihnen erscheinen.
Kann mir jemand helfen, etwas Licht in diese Schuppen?
Lösung
Ich fand das Problem war, dass ich das Programm in 64-Bit-Java ausgeführt wurde. Obwohl ich noch erfolgreich das Programm erkennen müssen, wenn es sich in 32-Bit- oder 64-Bit-Java ausgeführt hat, habe ich die Lösung gelöst durch eine 32-Bit-Java-Laufzeitumgebung zu installieren und eine .bat-Datei, die wie folgt lautet:
@echo off
"C:\Program Files (x86)\Java\jre6\bin\java" -D32 -Xmx1024m -jar programName.jar
Danke für die Hilfe!
Andere Tipps
Das war eine schwierige Herausforderung der Mangel an aussagekräftigen Fehlermeldungen von JAVA oder MS ODBC-Treiber angegeben. Die Antworten oben über unten Auswahl Java und MS Access-Treiber 32bit (mit AccessDatabaseEngine.exe von MS) funktionieren aber eine erhebliche Strafe (etwa 30%) Kosten bei der Verarbeitung andere Aktionen im Vergleich zu 64-Bit-Java verwenden. Ich war nicht bereit, diesen Preis zu zahlen, damit ich 64-Bit-Java (in Verbindung mit 32-Bit, die beide in einem separaten Verzeichnis c: \ Java \ 32 oder 64) installiert. Dieses letztere Verzeichnis Problem war für mich wichtig, da ich Apache Geronimo wurde mit und es wäre nicht gestartet werden, wenn Java in Program Files (x86) installiert wurde, ... als die (x86) schien seine Batch-Datei-Analyse zu töten. Ich habe dann deinstalliert 32bit MS Access und installiert 64bit MS Access (AccessDatabaseEngine_x64.exe). Schließlich ist es sowohl mit höherer Geschwindigkeit und MDB-Verbindung funktioniert.