Problemi con JDBC-ODBC, stringhe di connessione senza DSN, e 64-bit di Windows 7
-
25-09-2019 - |
Domanda
ho a che fare con un problema che è sorto per un'applicazione ho lavorato sul quale si connette ad un file di Access tramite JDBC-ODBC. Su altre piattaforme Windows, questo problema non è stato riscontrato, ma su Windows 7 scatole a 64 bit, che tenta di connettersi con le stringhe di connessione senza DSN ritorno:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
Più variazioni sulla corda sono state tentate, ma tutti sono tornati lo stesso errore. Ecco come è attualmente tenta di connettersi:
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}");
}
Esaminando il conducente a 32 bit Fonte Admin ODBC dati confermano che i driver sono presenti. Tuttavia, quando regedt32.exe viene utilizzato per esaminare ODBC driver (HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI/ODBC Drivers)
, nessuno di essi compare.
Chiunque può aiutare a far luce su questo?
Soluzione
Ho trovato il problema era che stavo facendo funzionare il programma in Java a 64 bit. Anche se devo ancora avere successo il programma di rilevare se è in esecuzione in 32-bit o 64-bit Java, ho risolto la soluzione con l'installazione di un ambiente runtime Java a 32 bit e l'utilizzo di un file .bat che recita come segue:
@echo off
"C:\Program Files (x86)\Java\jre6\bin\java" -D32 -Xmx1024m -jar programName.jar
Grazie per l'aiuto!
Altri suggerimenti
Questa è stata una sfida difficile data la scarsità di messaggi di errore significativi da Java o MS di driver ODBC. Le risposte di cui sopra in merito a Down scegliendo di 32bit driver di accesso Java e MS (usando AccessDatabaseEngine.exe da MS) ha funzionato, ma costano una penalità significativa (circa il 30%) nella lavorazione di altre azioni rispetto all'utilizzo 64bit Java. Ero disposto a pagare questo prezzo così ho installato Java a 64 bit (in collaborazione con 32 bit, sia in una directory separata c: \ Java \ 32 o 64). Questo problema directory Quest'ultimo è stato importante per me perché stavo usando Apache Geronimo e non sarebbe iniziare se Java è stato installato in Program Files (x86) ... come la (86) sembrava di uccidere la sua analisi del file batch. Poi ho disinstallato 32bit MS Access e 64 bit installato MS Access (AccessDatabaseEngine_x64.exe). Infine, ha funzionato sia con velocità di connessione e MDB superiore.