web-dev-qa-db-fra.com

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

J'essaie de me connecter à une base de données créée par MS Access à l'aide de Java, mais je n'arrive pas à gérer. J'utilise ODBC et j'obtiens cette exception:

Java.sql.SQLException: [Microsoft] [Gestionnaire de pilotes ODBC] Le DSN spécifié contient une incompatibilité 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);
        }
    }
}
78
user1028408

Aucun de ceux-ci l'a fait pour moi. J'ai trouvé la réponse sur MSDN. Il y avait des allusions à cela cependant. L'architecture de l'erreur fait référence à 32 vs 64 bits. Ma solution était de savoir sous quelle application mon application est exécutée (Access), 2010 étant 32b. 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 cela a été dit, le panneau de commande lancera la version 64 bit de ODBC à partir d’ici

c:\windows\system32\odbcad32.exe

et la version 32 bits est ici:

c:\windows\sysWOW64\odbcad32.exe (plus facile à copier et coller dans le dialogue d'exécution)

J'ai donc configuré les DSN avec des noms se terminant par 32 et 64 dans chacun des panneaux de contrôle ODBC correspondants (administrateur AKA) pointant vers la même chose. Ensuite, j'ai choisi le bon en fonction de l'application 32b ou 64b.

119
Pecos Bill

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

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

Pour ceux d'entre vous qui tentent de connecter MS-Access à MySQL sur un système Windows 64 bits, j'ai subi une véritable torture en essayant de le faire fonctionner à la fois avec MS-Access 2010 et MS-Access 2013. Enfin, cela a fonctionné, 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 à l'aide de tables MySQL.

  1. J'ai installé la dernière version de MySQL, 5.6, à l'aide de l'installation du package All In One. Cela vous permet d'installer simultanément la base de données et les pilotes ODBC. C'est bien, mais le pilote ODBC qu'il installe semble être un pilote 64 bits. Il ne fonctionnera donc pas avec MS-Access 32 bits. Cela semble aussi un peu buggy - pas à coup sûr sur celui-là. Lorsque vous ajoutez un nouveau DSN au gestionnaire ODBC, ce pilote apparaît sous le nom "Microsoft ODBC pour Oracle". Je ne pouvais pas faire fonctionner celui-ci. J'ai dû installer le 32 bits, discuté ci-dessous.

    • MySQL fonctionnait bien après l’installation. J'ai restauré ma base de données d'applications MySQL de la manière habituelle. Maintenant, je veux me connecter via MS-Access.


  2. J'avais précédemment installé Office 2013, ce qui, je suppose, était en 64 bits. Mais lors de la vérification de la version (Fichier, Compte, À propos d’Access), je vois qu’elle est en 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 dans le gestionnaire ODBC via le Panneau de configuration, Options d’administration, vous obtenez le gestionnaire ODBC 64 bits. Vous n'avez aucun moyen de le savoir! Vous ne pouvez pas dire. Ceci est un énorme gotcha !! Il est impossible de configurer un DSN à partir de là et de le connecter avec succès à MS Access 32 bits. Vous obtiendrez l'erreur redoutée:

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

  4. Vous devez télécharger et installer le pilote 32 bits ODBC depuis 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 appeler explicitement le gestionnaire ODBC 32 bits avec cette commande exécutée à l'invite de commande Démarrer:

    c:\windows\sysWOW64\odbcad32.exe

    J'ai créé un raccourci vers ceci sur mon bureau. À partir de là, construisez votre DSN avec ce gestionnaire. Point important: CONSTRUISEZ-LES COMME SYSTÈME DSNS, PAS D'UTILISATEUR DSNS! Cela m'a fait trébucher pendant un certain temps.

    À propos, la version 64 bits du gestionnaire ODBC peut également être exécutée explicitement comme suit:

    c:\windows\system32\odbcad32.exe

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


Ça le fait. 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 depuis Access - External Data, ODBC, Base de données, Lien vers la base de données, sélectionnez et le DSN que vous avez créé dans votre base de données MySQL sera présent.

24
Azolla99

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

Voir this

Correction: dépend de votre architecture.

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

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

8
Mob

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. En cela, compilez et exécutez votre application Java.

2
sai

J'ai vu cette réponse et cela a fonctionné pour moi. https://msdn.Microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

Après avoir installé un pilote ODBC à partir du programme d'installation du pilote, vous pouvez définir une ou plusieurs sources de données pour celui-ci. Le nom de la source de données (DSN) doit fournir une description unique des données. par exemple, Paie ou Comptes fournisseurs. Les sources de données utilisateur et système définies pour tous les pilotes actuellement installés sont répertoriées dans les onglets DSN utilisateur ou DSN système de la boîte de dialogue ODBC Administrateur de source de données. Les sources de données de fichiers d’un répertoire donné sont répertoriées dans l’onglet Fichier DSN; le répertoire à afficher est entré dans la zone Regarder dans de l'onglet Fichier DSN . System_CAPS_noteNote

Pour gérer une source de données qui se connecte à un pilote 32 bits sous une plate-forme 64 bits, utilisez c:\windows\sysWOW64\odbcad32.exe. Pour gérer une source de données qui se connecte à un pilote 64 bits, utilisez c:\windows\system32\odbcad32.exe. Dans les outils d'administration d'un système d'exploitation Windows 8 64 bits, il existe des icônes pour la boîte de dialogue Administrateur de source de données 32 bits et ODBC 32 bits.

Si vous utilisez le fichier odbcad32.exe 64 bits pour configurer ou supprimer un DSN qui se connecte à un pilote 32 bits, par exemple Driver do Microsoft Access (* .mdb), vous recevrez le message d'erreur suivant:

Le DSN spécifié contient une incompatibilité d'architecture entre le pilote et l'application.

Pour résoudre cette erreur, utilisez le fichier odbcad32.exe 32 bits pour configurer ou supprimer le DSN.

Une source de données associe un pilote ODBC particulier aux données auxquelles vous souhaitez accéder via ce pilote. Par exemple, vous pouvez créer une source de données pour utiliser le pilote ODBC dBASE afin d'accéder à un ou plusieurs fichiers dBASE figurant dans un répertoire spécifique de votre disque dur ou d'un lecteur réseau. À l'aide de l'administrateur de source de données ODBC, vous pouvez ajouter, modifier et supprimer des sources de données, comme décrit dans le tableau suivant.

1
Bineesh Kumar

Le problème que vous avez rencontré est peut-être dû au fait que: Microsoft Office 32 bits et l’invite de commande 64 bits . Pour résoudre le problème, vous devez suivre les deux étapes suivantes:

  1. Ouvrir ODBC Manager pour DSN utilisant: C:\Windows\SysWOW64\odbcad32.exe Ceci ouvrira le ODBC Data Administrator pour la version 32 bits et vous verrez tous les pilotes de base de données.

  2. Après cela, vous devez ouvrir l'invite de commande 32 bits à l'aide de: Dans ce nouveau CMD, recompilez votre programme Java et exécutez-le.

J'espère que cela aidera.

1
Sumit Kathuria

Un peu en retard, mais depuis que je rencontre le même problème, dans ton scénario exact, je me suis dit que j'ajouterais 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

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

Ce qui a finalement fonctionné, a été de faire correspondre la version bit de Java avec la version bit de Office. Une fois que j'ai fait cela, je pouvais utiliser le mode de connexion DSN ou DSN moins, sans aucun problème.

1
Spencer Kormos

Pour résoudre ce problème, assurez-vous d’abord que la version 32 bits de votre logiciel Java est une version 64 bits. L’erreur apparaîtra donc clairement, essayez donc de réinstaller la version 32 bits de Java Et exécutez le programme Java dans la commande de c:\windows\sysWOW64\odbcad32.exe (plus facile à copier et coller dans la boîte de dialogue d'exécution) ça suffit, votre programme fonctionne définitivement 

0
Savu Rajkumar

Pour résoudre ce problème, assurez-vous d’abord que la version 32 bits de votre logiciel Java est une version 64 bits. L’erreur apparaıt alors clairement. Essayez donc de réinstaller la version 32 bits de Java. windows\sysWOW64\odbcad32.exe (le plus facile à copier et coller dans la boîte de dialogue d'exécution) suffit que votre programme fonctionne définitivement

0
Raj Kumar

Si vous vous connectez depuis une plate-forme 64 bits à l'aide d'un pilote 32 bits, exécutez l'exécutable C:\Windows\SysWOW64\odbcad32.exe et créez le DSN. Ça va marcher.

0
Senthil

J'ai eu beaucoup de mal à relier MySQL à partir d'un ordinateur portable 64 bits, exécutant Windows 7, sous MS Access 2010. J'ai trouvé l'article précédent très utile, mais je ne pouvais toujours pas me connecter à l'aide de odbc 3.5.1. Comme j'avais précédemment lié une machine 32 bits à l'aide de Connector/ODBC 5.1.13, j'ai téléchargé cette version et l'ai configurée à l'aide des instructions ci-dessus. Succès. La réponse semble être d'essayer différentes versions de Connector.odbc.

0
user2909327

je pense que cela sera également plus utile.

pour l'architecture mademoiselle match,

je viens de copier le fichier jdk du fichier 32 bits C:\Program Files (x86)\Java\jdk1.7.0_71 et collez-le dans le fichier 64 bits C:\Program Files\Java\jdk1.7.0_10, puis renommez le fichier pour qu'il corresponde au fichier que vous remplacez afin d'éviter l'erreur IDE (netbeans)

alors vous êtes prêt à partir.

remarque: Vous devez sauvegarder vos fichiers 64 bits afin de pouvoir le retourner à son emplacement lorsque vous voulez créer une application 64 bits.

0
assenga priva

J'ai corrigé l'erreur.

Suis les étapes:

  1. Installer le JDK de la version 32bt
  2. Installer MS-Office 2007 
  3. Configurer le Panneau de configuration: une. Panneau de configuration b. Outils de l'administrateur c. Source de données (ODBC)

    clic droit dessus changer la cible en \sysWOW64\odbcad32.exe changer le début en r%\SysWOW64

Exécute-le et bonne chance. Fonctionne dans Windows 7 ainsi que 8

Supprimer la version plus récente de MS-Office et installer uniquement MS-Office 2007 si le problème persiste

0
Nitesh Achhra

J'ai rencontré ce problème lors de la mise à niveau vers un serveur Windows 7 avec certaines applications CLASP héritées. Essayer d'exécuter une application 32 bits sur une machine 64 bits.

Essayez de définir True sur la compatibilité 32 bits des pools d'applications et/ou de créer des DSN en 32 et 64 bits. 

Ouvrez la fenêtre de source de données odbc dans les deux versions à partir de la zone d’exécution . C:\Windows\SysWOW64\odbcad32.exe C:\Windows\system32\odbcad32.exe

0
user3183695

J'ai rencontré ce problème. Cela est dû à votre architecture informatique et à l’architecture de base de données que vous utilisez.

Si vous utilisez un système d'exploitation 32 bits, tout fonctionne bien car vous ne pouvez installer qu'un logiciel 32 bits. Le problème survient lorsque vous utilisez le système d'exploitation 64 bits.

Afin de résoudre ce problème est simple - j'ai mis longtemps à découvrir ce problème.

  1. Connaître votre système d'exploitation est en 64 bits, mais Microsoft Office en 32 bits.
  2. Par conséquent, pour pouvoir accéder à votre base de données à l’aide de NetBean IDE (en supposant que vous l’utilisez), vous devez installer le JDK 32 bits. Si vous avez installé 64 bits, vous devez le désinstaller et installer les 32 bits. 

Vous ne pouvez pas accéder à votre base de données car votre machine virtuelle Java 64 bits n’est pas identique à la machine virtuelle Java 32 bits.

Pour ajouter votre base de données à votre système 1. Panneau de configuration 2. Outils d’administrateur 3. Source de données (ODBC) Faites un clic droit dessus, changez la cible en \SysWOW64\odbcad32.exe Changez le début en R%\SysWOW64

Ensuite, vous devriez pouvoir courir. Informez-moi si vous avez un problème avec cela. 

Je vous remercie!

0
Andrew

Si vous utilisez netbeans, allez à tools-> Java Platform, changez jdk_home qui pointe sur c:/programfiles/Java/jdk1_7 en c: programFiles (x86)/Java/jdk1_6_21

si non éditable, trouvez netbeans.cnf et apportez les modifications comme indiqué ci-dessus pour jdk_home. redémarrez neatbeans et son fonctionnement .__ J'ai eu le même problème, mais j'ai travaillé.

0
deepak

Avez-vous créé le DSN d'abord dans Panneau de configuration> Outils d'administration> ODBC> DSN système . Nommez-le de la même manière que "myDatabase" et si je demande la localisation du fichier base de données/accès, spécifiez le chemin à l'aide de l'option de navigation . Une fois que votre DSN sera créé avec succès, vous pourrez facilement accéder à votre base de données.

0
Ankur Jain