84 votes

Le DSN spécifié contient un décalage d'architecture entre le pilote et l'application. JAVA

J'essaie de me connecter à une base de données réalisée par MS Access en utilisant Java, mais je n'y arrive pas. J'utilise ODBC et j'obtiens cette exception :

java.sql.SQLException : [Microsoft][ODBC Driver Manager] Le DSN spécifié contient un décalage d'architecture entre le pilote et l'application.

Mon 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);
        }
    }
}

128voto

Pecos Bill Points 469

Aucun d'entre eux ne l'a fait pour moi. J'ai trouvé la réponse sur MSDN. Il y avait pourtant des indices à ce sujet. L'architecture dans l'erreur fait référence à 32 ou 64 bits. Ma solution a été de trouver sous quelle application mon application est exécutée (Access), laquelle est en 32 bits. J'ai trouvé cela en regardant dans l'onglet Processus du Gestionnaire des tâches où tous les processus 32b ont * 32 à la fin de leur nom. Comme on l'a dit, le panneau de configuration lancera l'application 64 version bit d'ODBC à partir d'ici

c:\windows\system32\odbcad32.exe

et la version 32 bits est ici :

c:\windows\sysWOW64\odbcad32.exe (le plus simple est de copier et coller dans la boîte de dialogue d'exécution)

J'ai donc configuré des DSN avec des noms se terminant par 32 et 64 dans chacun des panneaux de contrôle ODBC correspondants (AKA Administrator) qui pointaient vers la même chose. Ensuite, j'ai sélectionné/choisi le bon en fonction du fait que l'application qui l'utilise est 32b ou 64b.

26voto

Azolla99 Points 51

Vous obtenez exactement la même erreur lorsque vous essayez de vous connecter à une base de données MySQL à partir de MS-Access et que la version binaire (32 ou 64) d'Access ne correspond pas.

  1. la version bit du pilote ODBC que vous utilisez
  2. la version bit du gestionnaire ODBC que vous avez utilisé pour le configurer.

Pour ceux d'entre vous qui essaient de connecter MS-Access à MySQL sur un système Windows 64 bits, je me suis torturé à essayer de faire fonctionner MS-Access 2010 et MS-Access 2013. J'ai finalement réussi à le faire fonctionner, et voici les leçons que j'ai apprises en cours de route :

J'ai acheté un nouvel ordinateur portable Windows 7, 64 bits, et j'ai une application qui repose sur MS-Access utilisant des tables MySQL.

  1. J'ai installé la dernière version de MySQL, 5.6, en utilisant le package d'installation All In One. Cela vous permet d'installer à la fois la base de données et les pilotes ODBC en une seule fois. C'est bien, mais le pilote ODBC qu'il installe semble être celui de 64 bits, donc il ne fonctionnera pas avec MS-Access de 32 bits. Il semble également présenter un petit bogue - je n'en suis pas sûr. Lorsque vous ajoutez un nouveau DSN dans le gestionnaire ODBC, ce pilote apparaît comme "Microsoft ODBC For Oracle". Je n'ai pas réussi à le faire fonctionner. J'ai dû installer le pilote 32 bits, dont il est question ci-dessous.

    • MySQL fonctionnait bien après l'installation. J'ai restauré la base de données MySQL de mon application de la manière habituelle. Je veux maintenant m'y connecter à l'aide de MS-Access.
  2. J'avais précédemment installé Office 2013, que je pensais être en 64 bits. Mais en vérifiant la version (Fichier, Compte, À propos d'Access), je constate qu'elle est de 32 bits. Access 2010 et 2013 sont le plus souvent vendus en version 32 bits.

  3. Ma machine est une machine 64 bits. Ainsi, par défaut, lorsque vous configurez vos DSN pour MS-Access, et que vous accédez de la manière habituelle au gestionnaire ODBC via le Panneau de configuration, Options administratives, vous obtenez le gestionnaire ODBC 64 bits. Vous n'avez aucun moyen de le savoir ! Vous ne pouvez tout simplement pas le savoir. C'est un énorme gotcha ! Il est impossible de configurer un DSN à partir de là et de le faire se connecter avec succès à MS Access 32 bits. Vous obtiendrez l'erreur redoutée :

    "le dsn spécifié contient une erreur d'architecture..."

  4. Vous devez télécharger et installer le pilote ODBC 32 bits de MySQL. J'ai utilisé la version 3.5.1

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

  5. Vous devez indiquer au gestionnaire ODBC dans le Panneau de configuration de faire une randonnée et devez plutôt invoquer explicitement le gestionnaire ODBC 32 bits avec cette commande exécutée à l'invite Démarrer, Commande :

    c : \windows\sysWOW64\odbcad32.exe

    J'ai créé un raccourci vers celui-ci sur mon bureau. A partir de là, construisez votre DSN avec ce gestionnaire. Point important : construisez-les en tant que DSNS système, pas en tant que DSNS utilisateur ! Cela m'a fait trébucher pendant un certain temps.

    A propos, la version 64 bits de l'ODBC Manager peut également être exécutée explicitement en tant que :

    c : \windows\system32\odbcad32.exe

  6. Une fois que vous avez installé le pilote ODBC 32 bits de MySql, lorsque vous cliquez sur Ajouter dans le gestionnaire ODBC, vous verrez 2 pilotes listés. Choisissez "MySQL ODBC 5.2 ANSI Driver". Je n'ai pas essayé le pilote UNICODE.


C'est tout. Une fois que vous avez défini vos DSN dans le gestionnaire ODBC 32 bits, vous pouvez vous connecter à MySQL de la manière habituelle à partir d'Access - Données externes, base de données ODBC, lien vers la base de données, sélection de la source de données machine, et le DSN que vous avez créé vers votre base de données MySQL sera là.

8voto

Mob Points 5926

Il y a un décalage d'architecture. Votre pilote JDBC et votre JDK doivent avoir la même architecture. Si vous utilisez un pilote 32 bits et que votre JDK est 64 bits, vous obtiendrez cette erreur.

Voir este

Correction : Cela dépend de votre architecture.

Vous aurez besoin de pilotes 64 bits si votre Java est 64 bits.

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

2voto

sai Points 21

Par défaut, l'invite de commande est connectée à System32. Exécutez une invite de commande 64 bits, c'est-à-dire, C:\WINDOWS\SYSWOW64\CMD.EXE . Dans ce cas, compilez et exécutez votre application java.

1voto

Spencer Kormos Points 3082

Un peu tard, mais comme j'ai rencontré le même problème, dans votre scénario exact, je me suis dit que j'allais ajouter ma solution.

J'ai Windows 7 (64 bits) et Office 2010 (32 bits). J'ai essayé avec la chaîne de connexion sans DSN :

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

J'ai essayé avec la connexion DSN, en utilisant les versions System32 et SysWOW64 de l'Admin ODBC, et rien de tout cela n'a fonctionné.

Ce qui a finalement fonctionné, c'est de faire correspondre la version bit de Java avec la version bit d'Office. Une fois cela fait, j'ai pu utiliser le mode de connexion DSN ou DSN less, sans problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X