Il DSN specificato contiene una mancata corrispondenza dell'architettura tra il driver e l'applicazione. GIAVA


85

Sto cercando di connettermi a un database creato da MS Access utilizzando Java, ma non riesco a gestirlo. Sto usando ODBC e ricevo questa eccezione:

java.sql.SQLException: [Microsoft] [ODBC Driver Manager] Il DSN specificato contiene una mancata corrispondenza dell'architettura tra il driver e l'applicazione

Il mio 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
Stai usando una jvm a 64 bit? In tal caso, è necessario un driver odbc a 64 bit.
dogbane

1
Sì, penso di esserlo. Ho trovato la versione a 64 bit di odbc in C: \ Windows \ SysWOW64 ma non è la stessa su cui si accende il pannello di controllo.
user1028408

Non è possibile installare il driver a 64 bit perché gli altri miei prodotti per ufficio sono a 32 bit: /
DavidVdd

Risposte:


128

Nessuno di questi lo ha fatto per me. Ho trovato la risposta su MSDN. C'erano però dei suggerimenti. L'architettura nell'errore si riferisce a 32 vs 64 bit. La mia soluzione era scoprire quale mia app è in esecuzione in (Accesso) che 2010 è 32b. L'ho trovato cercando nella scheda Processo di Task Manager dove tutti i processi 32b hanno * 32 alla fine dei loro nomi. Come è stato detto, il pannello di controllo lancerà la versione a 64 bit di ODBC da qui

c:\windows\system32\odbcad32.exe

e la versione a 32 bit è qui:

c:\windows\sysWOW64\odbcad32.exe (più facile da copiare e incollare nella finestra di dialogo Esegui)

Quindi ho impostato DSN con nomi che terminano con 32 e 64 in ciascuno dei corrispondenti pannelli di controllo ODBC (AKA Administrator) che indicavano la stessa cosa. Quindi, ho scelto / scelto quello corretto in base al fatto che l'app che lo utilizza sia 32b o 64b.


avevo provato la versione a 64 bit e l'ho eseguito come amministratore, ma non funziona !!
Fatima Zohra

2
Ci deve essere un po 'di armonia. Se l'app è a 32 bit, deve esserci una configurazione a 32 bit. Se l'app è 64, devi averne una 64. Non ho provato a creare configurazioni con lo stesso nome perché non volevo che andassero fuori sincronizzazione (dimentica di cambiarle entrambe contemporaneamente). Non mi hai dato abbastanza informazioni per cercare di offrire suggerimenti. Spero tu l'abbia capito. (Perché non possono fare una cosa così semplice e creare un'app a 64 bit che configura ambienti sia a 64 che a 32 bit ???)
Pecos Bill

E come affermato di seguito ma non ovvio, anche i driver coinvolti devono corrispondere (probabilmente è meglio installare sia 32 che 64) anche se non penso che tu possa scegliere il driver se non fosse l'architettura corretta.
Pecos Bill

Questo mi ha anche aiutato a decifrare il motivo per cui il mio Excel a 32 bit non poteva connettersi al nostro Hadoop Hive Server utilizzando il driver ODBC Cloudea Hive a 64 bit. Una volta passato al connettore a 32 bit, ha funzionato benissimo!
Mark Vickery

2
Quindi, per essere chiari: non è possibile configurare una connessione ODBC PostgreSQL a 32 bit tramite la normale GUI di Windows su un sistema a 64 bit. È invece necessario chiudere l'amministratore dell'origine dati ODBC (se è attualmente aperto), eseguire c:\windows\sysWOW64\odbcad32.exee configurare la connessione da lì. Quindi è possibile utilizzare successivamente quella connessione in un programma a 32 bit per accedere al database.
Ajedi32

26

Si ottiene esattamente lo stesso errore quando si tenta di connettersi a un database MySQL da MS-Access quando la versione bit (32 vs 64) di Access non corrisponde

  1. la versione bit del driver ODBC che stai utilizzando
  2. la versione bit del gestore ODBC che hai utilizzato per configurarlo.

Per quelli di voi che cercavano di connettere MS-Access a MySQL su un sistema Windows a 64 bit, sono passato attraverso la tortura pura cercando di farlo funzionare sia con MS-Access 2010 che con MS-Access 2013. Finalmente ho funzionato, ed eccolo qui le lezioni che ho imparato lungo la strada:

Ho acquistato un nuovo laptop Windows 7, 64 bit e ho un'app che si basa su MS-Access utilizzando le tabelle MySQL.

  1. Ho installato l'ultima versione di MySQL, 5.6, utilizzando l'installazione del pacchetto All In One. Ciò consente di installare contemporaneamente sia il database che i driver ODBC. È carino, ma il driver ODBC che installa sembra essere quello a 64 bit, quindi non funzionerà con MS-Access a 32 bit. Sembra anche un po 'buggato, non di sicuro su quello. Quando si aggiunge un nuovo DSN in Gestione ODBC, questo driver viene visualizzato come "Microsoft ODBC per Oracle". Non sono riuscito a far funzionare questo. Ho dovuto installare quello a 32 bit, discusso di seguito.

    • MySQL funzionava bene dopo l'installazione. Ho ripristinato il database MySQL della mia applicazione nel solito modo. Ora voglio collegarmi ad esso utilizzando MS-Access.


  2. In precedenza avevo installato Office 2013, che supponevo fosse a 64 bit. Ma dopo aver controllato la versione (File, Account, Informazioni sull'accesso), vedo che è a 32 bit. Sia Access 2010 che 2013 sono più comunemente venduti come versioni a 32 bit.

  3. La mia macchina è una macchina a 64 bit. Quindi, per impostazione predefinita, quando vai a configurare i tuoi DSN per MS-Access e vai nel solito modo in Gestione ODBC tramite Pannello di controllo, Opzioni di amministrazione, ottieni il gestore ODBC a 64 bit. Non hai modo di saperlo! Non puoi proprio dirlo. Questo è un enorme trucchetto !! È impossibile impostare un DSN da lì e collegarlo correttamente a MS Access 32 bit. Otterrai il temuto errore:

    "il dsn specificato contiene una mancata corrispondenza dell'architettura ..."

  4. È necessario scaricare e installare il driver ODBC a 32 bit da MySQL. Ho usato la versione 3.5.1

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

  5. Devi dire al Manager ODBC nel Pannello di controllo di fare un'escursione e devi invece invocare esplicitamente il Manager ODBC a 32 bit con questo comando eseguito allo Start, prompt dei comandi:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Ho creato un collegamento a questo sul mio desktop. Da qui, crea il tuo DSN con questo gestore. Punto importante: COSTRUISCI COME DSNS DI SISTEMA, NON DSNS UTENTE! Questo mi ha fatto inciampare per un po '.

    A proposito, la versione a 64 bit di ODBC Manager può anche essere eseguita esplicitamente come:

    c: \ windows \ system32 \ odbcad32.exe

  6. Dopo aver installato il driver ODBC a 32 bit da MySql, quando fai clic su Aggiungi in Gestione ODBC vedrai 2 driver elencati. Scegli "MySQL ODBC 5.2 ANSI Driver". Non ho provato il driver UNICODE.


Questo lo fa. Dopo aver definito i tuoi DSN nel gestore ODBC a 32 bit, puoi connetterti a MySQL nel solito modo da Accesso - Dati esterni, Database ODBC, Collegamento al database, selezionare Origine dati macchina e il DSN che hai creato su MySQL database sarà lì.


2
Penso che tu abbia cambiato percorso per i due manager ODBC32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
Jrgns

3
@Jrgns No, non sono stati scambiati. sysWOW64è in realtà la directory a 32 bit. Windows ama creare confusione. Saprai quale versione stai utilizzando perché mostrerà (32 bit) o ​​(64 bit) nella barra del titolo dell'amministratore origine dati ODBC.
Tim Leaf

8

C'è una mancata corrispondenza dell'architettura. Il tuo driver JDBC e il tuo JDK dovrebbero avere la stessa architettura. Se utilizzi il driver a 32 bit e il tuo JDK è a 64 bit, riceverai quell'errore.

Vedi questo

Correzione: dipende dalla tua architettura.

Avrai bisogno di driver a 64 bit se il tuo Java è a 64 bit.

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


L'ho scaricato e ho provato la nuova stringa di connessione come specificato nelle istruzioni ma ancora non ha funzionato. Forse sto facendo qualcosa di sbagliato?
user1028408

2

Ho visto questa risposta e ha funzionato per me. https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

Dopo aver installato un driver ODBC dal programma di installazione del driver, è possibile definire una o più origini dati per esso. Il nome dell'origine dati (DSN) dovrebbe fornire una descrizione univoca dei dati; ad esempio, Payroll o Accounts Payable. Le origini dati utente e sistema definite per tutti i driver attualmente installati sono elencate nelle schede DSN utente o DSN di sistema della finestra di dialogo Amministratore origine dati ODBC. Le origini dati dei file in una determinata directory sono elencate nella scheda DSN su file; la directory da visualizzare viene inserita nella casella Cerca in della scheda DSN su file. System_CAPS_noteNote

Per gestire un'origine dati che si connette a un driver a 32 bit su una piattaforma a 64 bit, utilizzare c: \ windows \ sysWOW64 \ odbcad32.exe. Per gestire un'origine dati che si connette a un driver a 64 bit, utilizzare c: \ windows \ system32 \ odbcad32.exe. In Strumenti di amministrazione su un sistema operativo Windows 8 a 64 bit, sono presenti icone per la finestra di dialogo Amministratore origine dati ODBC a 32 bit e 64 bit.

Se si utilizza odbcad32.exe a 64 bit per configurare o rimuovere un DSN che si connette a un driver a 32 bit, ad esempio Driver do Microsoft Access (* .mdb), verrà visualizzato il seguente messaggio di errore:

Il DSN specificato contiene una mancata corrispondenza dell'architettura tra il driver e l'applicazione

Per risolvere questo errore, utilizzare odbcad32.exe a 32 bit per configurare o rimuovere il DSN.

Un'origine dati associa un particolare driver ODBC ai dati a cui si desidera accedere tramite quel driver. Ad esempio, è possibile creare un'origine dati per utilizzare il driver ODBC dBASE per accedere a uno o più file dBASE trovati in una directory specifica sul disco rigido o su un'unità di rete. Utilizzando l'Amministratore origine dati ODBC, è possibile aggiungere, modificare ed eliminare origini dati, come descritto nella tabella seguente.


Ciao Bineesh Kumar, potresti spiegare per favore Breafly
Raj Kumar

2

Per impostazione predefinita, il prompt dei comandi è connesso a System32. Esegui un prompt dei comandi a 64 bit, ovvero C:\WINDOWS\SYSWOW64\CMD.EXE. In questo, compila ed esegui la tua applicazione java.


2

Per risolvere questo problema prima assicurati che il tuo software java dovrebbe essere una versione a 32 bit se è una versione a 64 bit chiaramente mostrerà l'errore di mancata corrispondenza, quindi prova a reinstallare 32 bit della versione java ed esegui il programma java nel comando di c: \ windows \ sysWOW64 \ odbcad32.exe (più facile da copiare e incollare nella finestra di dialogo di esecuzione) è sufficiente che il tuo programma funzioni sicuramente


1

Il problema che stavi affrontando potrebbe essere dovuto a: Office a 32 bit e Prompt dei comandi a 64 bit. Per risolvere il problema è necessario seguire 2 passaggi:

  1. Apri ODBC Manager per DSN utilizzando: C: \ Windows \ SysWOW64 \ odbcad32.exe Questo aprirà ODBC Data Administrator per la versione a 32 bit e vedrai tutti i driver del database.

  2. Successivamente è necessario aprire il prompt dei comandi a 32 bit utilizzando: C: \ Windows \ SysWOW64 \ cmd.exe Questo aprirà la versione a 32 bit del prompt dei comandi. In questo nuovo CMD ricompilare il programma Java ed eseguire il programma.

Spero che questo ti aiuti.


1

Un po 'tardi, ma poiché ho riscontrato lo stesso problema, nel tuo scenario esatto, ho pensato di aggiungere la mia soluzione.

Ho Windows 7 (64 bit) e Office 2010 (32 bit). Ho provato con la stringa di connessione senza DSN:

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

e ho provato con la connessione DSN, utilizzando entrambe le versioni System32 e SysWOW64 dell'amministratore ODBC, e niente di tutto ciò ha funzionato.

Ciò che alla fine ha funzionato è stato quello di abbinare la versione bit di Java con la versione bit di Office. Dopo averlo fatto, ho potuto utilizzare la modalità di connessione DSN o DSN senza, senza problemi.


L'ho sottinteso dalla risposta di Mob, ma grazie per la conferma. Che casino!
Kevin Bowersox

0

Hai creato il DSN prima in Pannello di controllo> Strumenti di amministrazione> ODBC> DSN di sistema. Chiamalo come "myDatabase" e se sto chiedendo di localizzare il database / file di accesso specifica il percorso usando l'opzione Browse. Una volta che il tuo DSN sarà stato creato con successo, sarai facilmente in grado di accedere al tuo DB.


Ho creato il mio DSN con l'ODBC che ho trovato in C: \ Windows \ SysWOW64 ... Quello nel pannello di controllo non aveva quasi driver, tranne quelli per sql server.
user1028408

quindi è necessario installare i driver perché senza questi driver non è possibile effettuare la connessione ODBC.
Ankur Jain

hai un link a questi driver? Ho provato a installarne alcuni ma non hanno funzionato.
user1028408


Li ho scaricati e ho sostituito la stringa di connessione: Connection dbConnection = DriverManager.getConnection ("Driver = {Microsoft Access Driver (*. Mdb, * .accdb)}; DBQ = C: \\ Users \\ Owner \\ Documents \\ myDatabase .mdb "," admin "," "); ma continua a darmi problemi. Forse devo cambiare qualcos'altro nel codice?
user1028408

0

Se stai usando netbeans vai su tools-> java Platform, cambia jdk_home che punta a c: / programfiles / java / jdk1_7 in c: programFiles (x86) / java / jdk1_6_21

se non modificabile, trova netbeans.cnf e apporta le modifiche come indicato sopra per jdk_home. riavviare neatbeans e come funziona ho avuto lo stesso problema, ma ho funzionato.


0

Ho avuto molti problemi con il collegamento a MySQL da un laptop a 64 bit, con Windows 7, utilizzando MS Access 2010. Ho trovato l'articolo precedente molto utile, ma ancora non sono riuscito a connettermi utilizzando odbc 3.5.1. Poiché in precedenza avevo collegato una macchina a 32 bit utilizzando Connector / ODBC 5.1.13, ho scaricato quella versione e l'ho configurata utilizzando le istruzioni sopra. Successo. La risposta sembra essere provare diverse versioni di Connector.odbc.


0

Se ci si connette da una piattaforma a 64 bit utilizzando un driver a 32 bit, eseguire l'eseguibile C: \ Windows \ SysWOW64 \ odbcad32.exe e creare il DSN. Funzionerà.


0

Ho riscontrato questo problema durante l'aggiornamento a un server Windows 7 con alcune applicazioni CLASP legacy. Tentativo di eseguire un'applicazione a 32 bit su una macchina a 64 bit.

Prova a impostare la compatibilità a 32 bit dei pool di applicazioni su True e / o crea DSN a 32 e 64 bit.

Aprire la finestra dell'origine dati odbc in entrambe le versioni dalla casella di esecuzione. C: \ Windows \ SysWOW64 \ odbcad32.exe C: \ Windows \ system32 \ odbcad32.exe


0

Ho riscontrato questo problema. Ciò è dovuto all'architettura del tuo computer e all'architettura del database che stai utilizzando.

Se stai utilizzando un sistema operativo a 32 bit, tutto funziona bene perché puoi installare solo software a 32 bit. Il problema si verifica quando si utilizza il sistema operativo a 64 bit.

Per risolvere questo problema è semplice: ho impiegato molto tempo per scoprire questo problema.

  1. Sapere che il tuo sistema operativo è a 64 bit ma il tuo Microsoft Office è a 32 bit.
  2. Quindi, per poter accedere al tuo database usando NetBean IDE (supponendo che tu lo stia usando), devi installare JDK a 32 bit. Se hai installato 64 bit, devi disinstallarlo e installare i 32 bit.

Non puoi accedere al tuo database perché la tua JVM a 64 bit non è la stessa della JVM a 32 bit.

Per aggiungere il database al sistema 1. Pannello di controllo 2. Strumenti dell'amministratore 3. Origine dati (ODBC) fai clic con il pulsante destro del mouse su di esso cambia la destinazione in \ sysWOW64 \ odbcad32.exe cambia l'inizio in r% \ SysWOW64

Allora dovresti essere in grado di correre. Informami se hai qualche problema con questo.

Grazie!


0

Ho corretto l'errore.

Segui i passi:

  1. Installa JDK della versione 32bt
  2. Installa MS-Office 2007
  3. Configurare il pannello di controllo: a. Pannello di controllo b. Strumenti amministratore c. Origine dati (ODBC)

    fare clic con il tasto destro del mouse su di esso per modificare la destinazione in cui \sysWOW64\odbcad32.exemodificare l'inizior%\SysWOW64

Eseguilo e buona fortuna. Funziona in Windows 7 e 8

Rimuovere la versione più recente di MS-Office e installare solo MS-Office 2007 se il problema persiste


0

Per risolvere questo problema prima assicurati che il tuo software java dovrebbe essere la versione a 32 bit se è una versione a 64 bit chiaramente mostrerà l'errore di mancata corrispondenza quindi prova a reinstallare 32 bit della versione java ed esegui il programma java nel comando di c:\windows\sysWOW64\odbcad32.exe(più facile da copia e incolla nella finestra di dialogo di esecuzione) è sufficiente che il tuo programma funzioni sicuramente


0

Penso che anche questo sarà più utile.

per l'architettura miss match,

copio semplicemente il file jdk dal file a 32 bit C: \ Program Files (x86) \ Java \ jdk1.7.0_71 e lo incollo nel file a 64 bit C: \ Program Files \ Java \ jdk1.7.0_10, quindi rinomina il file in modo che corrisponda al file che sostituisci per evitare l'errore IDE (netbeans)

allora sei a posto.

nota: è necessario eseguire il buckup dei file a 64 bit in modo che quando si desidera creare un'applicazione a 64 bit è possibile riportarla nella sua posizione


Hacky McHack Hack :(
Gareth

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.