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

85

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

java.sql.SQLException: [Microsoft] [ODBC Driver Manager] 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);
        }
    }
}
user1028408
la source
2
Utilisez-vous un jvm 64 bits? Si tel est le cas, vous avez besoin d'un pilote odbc 64 bits.
dogbane
1
Oui, je pense que je suis. J'ai trouvé la version 64 bits de l'odbc dans C: \ Windows \ SysWOW64 mais ce n'est pas la même que celle que le panneau de contrôle s'allume.
user1028408
Impossible d'installer le pilote 64 bits car mes autres produits bureautiques sont 32 bits: /
DavidVdd

Réponses:

128

Aucun de ceux-ci ne l'a fait pour moi. J'ai trouvé la réponse sur MSDN. Il y avait cependant des indices. L'architecture de l'erreur fait référence à 32 contre 64 bits. Ma solution était de savoir quelle application fonctionne sous (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 leurs noms. Comme cela a été dit, le panneau de contrôle lancera la version 64 bits d'ODBC à partir d'ici

c:\windows\system32\odbcad32.exe

et la version 32 bits est ici:

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

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

Bill Pecos
la source
J'avais essayé la version 64 bits et l'ai exécutée en tant qu'administrateur, mais cela ne fonctionne pas non plus !!
Fatima Zohra
2
Il doit y avoir un peu d'harmonie. Si l'application est 32, il doit y avoir une configuration 32 bits pour elle. Si l'application est de 64, vous devez en avoir une de 64. Je n'ai pas essayé de créer des configurations avec le même nom car je ne voulais pas qu'elles se désynchronisent (oubliez de changer les deux en même temps). Vous ne m'avez pas donné suffisamment d'informations pour essayer de proposer des suggestions. J'espère que vous l'avez compris. (Pourquoi ne peuvent-ils pas faire la chose si simple et créer une application 64 bits qui configure les environnements 64 et 32 ​​bits ???)
Pecos Bill
Et comme indiqué ci-dessous mais pas évident, les pilotes impliqués doivent également correspondre (il est probablement préférable d'installer à la fois 32 et 64) bien que je ne pense pas que vous puissiez choisir le pilote si ce n'était pas la bonne architecture.
Pecos Bill
Cela m'a également aidé à comprendre pourquoi mon Excel 32 bits ne pouvait pas se connecter à notre serveur Hadoop Hive à l'aide du pilote ODBC Cloudea Hive 64 bits. Une fois que je suis passé au connecteur 32 bits, cela a très bien fonctionné!
Mark Vickery
2
Donc, pour être clair: vous ne pouvez pas configurer une connexion ODBC PostgreSQL 32 bits via l'interface graphique Windows normale sur un système 64 bits. Vous devez à la place fermer l'administrateur de source de données ODBC (s'il est actuellement ouvert), exécuter c:\windows\sysWOW64\odbcad32.exeet configurer la connexion à partir de là. Vous pourrez ensuite utiliser cette connexion ultérieurement dans un programme 32 bits pour accéder à la base de données.
Ajedi32
26

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 bit (32 vs 64) d'Access ne correspond pas

  1. la version binaire du pilote ODBC que vous utilisez
  2. la version binaire 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, j'ai subi une torture pure en essayant de le faire fonctionner à la fois avec MS-Access 2010 et MS-Access 2013. Finalement, cela fonctionne, 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 en utilisant des tables MySQL.

  1. J'ai installé la dernière version de MySQL, 5.6, en utilisant l'installation du package All In One. Cela vous permet d'installer à la fois la base de données et les pilotes ODBC. C'est bien, mais le pilote ODBC qu'il installe semble être le 64 bits, il ne fonctionnera donc pas avec MS-Access 32 bits. Cela semble aussi un peu bogué - pas sûr sur celui-là. Lorsque vous ajoutez un nouveau DSN dans le gestionnaire ODBC, ce pilote apparaît comme «Microsoft ODBC pour Oracle». Je n'ai pas pu faire fonctionner celui-ci. J'ai dû installer le 32 bits, décrit 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. Maintenant, je veux me connecter à l'aide de MS-Access.


  2. J'avais précédemment installé Office 2013, que je supposais être 64 bits. Mais en vérifiant la version (fichier, compte, à propos de l'accès), je vois qu'elle est 32 bits. Access 2010 et 2013 sont le plus souvent vendus sous forme de versions 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, les options administratives, vous obtenez le gestionnaire ODBC 64 bits. Vous n'avez aucun moyen de le savoir! Vous ne pouvez pas le dire. C'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 ODBC 32 bits à partir de MySQL. J'ai utilisé la version 3.5.1

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

  5. Vous devez dire au gestionnaire ODBC dans le panneau de configuration de faire une randonnée et devez à la place invoquer 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 cela sur mon bureau. À partir de là, créez votre DSN avec ce gestionnaire. Point important: CONSTRUISEZ-LES COMME DSNS SYSTÈME, PAS UTILISATEUR DSNS! Cela m'a fait trébucher pendant un moment.

    À propos, la version 64 bits du gestionnaire ODBC 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 à partir de MySql, lorsque vous cliquez sur Ajouter dans le gestionnaire ODBC, vous verrez 2 pilotes répertoriés. Choisissez "Pilote ANSI MySQL ODBC 5.2". 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 - Données externes, base de données ODBC, lien vers la base de données, sélectionnez Source de données machine et le DSN que vous avez créé sur votre MySQL base de données sera là.

Azolla99
la source
2
Je pense que vous avez changé de chemin pour les deux gestionnaires ODBC32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
Jrgns
3
@Jrgns Non, ils ne sont pas commutés. sysWOW64est en fait le répertoire 32 bits. Windows adore être déroutant. Vous saurez quelle version vous utilisez car elle s'affichera (32 bits) ou (64 bits) dans la barre de titre de l'administrateur de sources de données ODBC.
Tim Leaf
8

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

Voir ça

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

Foule
la source
Je l'ai téléchargé et essayé la nouvelle chaîne de connexion comme spécifié dans les instructions, mais cela ne fonctionnait toujours pas. Peut-être que je fais quelque chose de mal?
user1028408
2

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 Administrateur de sources de données ODBC. Les sources de données de fichier dans un répertoire donné sont répertoriées dans l'onglet Fichier DSN; le répertoire à afficher est entré dans la zone Rechercher 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 ODBC 32 bits et 64 bits.

Si vous utilisez l'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 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 pour accéder à un ou plusieurs fichiers dBASE trouvés dans un répertoire spécifique sur votre disque dur ou un lecteur réseau. À l'aide de l'administrateur de sources de données ODBC, vous pouvez ajouter, modifier et supprimer des sources de données, comme décrit dans le tableau suivant.

Bineesh Kumar
la source
Bonjour Bineesh Kumar, pourriez-vous expliquer breafly
Raj Kumar
2

Par défaut, l'invite de commandes 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.

sai
la source
2

Pour résoudre ce problème, assurez-vous d'abord que votre logiciel java doit être une version 32 bits s'il s'agit d'une version 64 bits, il affichera clairement l'erreur de non-concordance alors essayez de réinstaller 32 bits de la version java et exécutez le programme java dans la commande de c: \ windows \ sysWOW64 \ odbcad32.exe (le plus simple à copier et coller dans la boîte de dialogue d'exécution) c'est assez que votre programme fonctionne définitivement

Raj Kumar
la source
1

Le problème auquel vous êtes confronté peut être dû au fait que: vous aviez Office 32 bits et une invite de commande 64 bits. Pour résoudre le problème, vous devez suivre 2 étapes:

  1. Ouvrez le gestionnaire ODBC pour DSN en utilisant: C: \ Windows \ SysWOW64 \ odbcad32.exe Cela ouvrira l'Administrateur de données ODBC 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 en utilisant: C: \ Windows \ SysWOW64 \ cmd.exe Cela ouvrira la version 32 bits de l'invite de commande. Dans ce nouveau CMD, veuillez recompiler votre programme Java et exécuter votre programme.

J'espère que cela aidera.

Sumit Kathuria
la source
1

Un peu tard, mais comme j'ai rencontré le même problème, dans votre scénario exact, j'ai pensé 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 à la fois les versions System32 et SysWOW64 de l'administrateur ODBC, et rien de tout cela n'a fonctionné.

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

Spencer Kormos
la source
Je l'ai sous-entendu à partir de la réponse de Mob, mais merci de confirmer. Quel bordel!
Kevin Bowersox le
0

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

Ankur Jain
la source
J'ai créé mon DSN avec l'ODBC que j'ai trouvé dans C: \ Windows \ SysWOW64 ... Celui du panneau de contrôle n'avait presque pas de pilotes pour enregistrer ceux du serveur SQL.
user1028408
vous devez ensuite installer les pilotes car sans ces pilotes, vous ne pouvez pas établir de connexion ODBC.
Ankur Jain
avez-vous un lien vers ces pilotes? J'ai essayé d'en installer mais cela n'a pas fonctionné.
user1028408
Je les ai téléchargés et ai remplacé la chaîne de connexion: Connection dbConnection = DriverManager.getConnection ("Driver = {Microsoft Access Driver (*. Mdb, * .accdb)}; DBQ = C: \\ Users \\ Owner \\ Documents \\ myDatabase .mdb "," admin "," "); mais ça me donne toujours des ennuis. Peut-être ai-je besoin de changer autre chose dans le code?
user1028408
0

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

s'il n'est pas modifiable, recherchez netbeans.cnf et effectuez les modifications comme indiqué ci-dessus pour jdk_home. redémarrer neatbeans et comment cela fonctionne J'ai eu le même problème, mais j'ai travaillé.

deepak
la source
0

J'ai eu beaucoup de mal à me connecter à MySQL depuis un ordinateur portable 64 bits, exécutant Windows 7, utilisant MS Access 2010. J'ai trouvé l'article précédent très utile, mais je n'arrivais toujours pas à me connecter en utilisant 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 en utilisant les instructions ci-dessus. Succès. La réponse semble être d'essayer différentes versions de Connector.odbc.

user2909327
la source
0

Si vous vous connectez à partir d'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.

Senthil
la source
0

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 la compatibilité 32 bits des pools d'applications sur True et / ou créez 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

user3183695
la source
0

J'ai rencontré ce problème. Cela est dû à l'architecture de votre ordinateur 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 que des logiciels 32 bits. Le problème survient lorsque vous utilisez le système d'exploitation 64 bits.

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

  1. Connaître votre système d'exploitation est 64 bits mais votre Microsoft Office est 32 bits.
  2. Donc, pour que vous puissiez accéder à votre base de données en utilisant 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 JVM 64 bits n'est pas la même que la JVM 32 bits.

Pour ajouter votre base de données dans votre système 1. Panneau de configuration 2. Outils d'administration 3. Source de données (ODBC), cliquez dessus avec le bouton droit de la souris, 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.

Merci!

Andrew
la source
0

J'ai corrigé l'erreur.

Suis les étapes:

  1. Installez le JDK de la version 32bt
  2. Installez MS-Office 2007
  3. Configurer le panneau de configuration: a. Panneau de contrôle b. Outils d'administration c. Source de données (ODBC)

    clic droit dessus changer la cible pour \sysWOW64\odbcad32.exechanger le début enr%\SysWOW64

Exécutez-le et meilleure chance. Fonctionne sous Windows 7 ainsi que 8

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

Nitesh Achhra
la source
0

Pour résoudre ce problème, assurez-vous d'abord que votre logiciel java doit être une version 32 bits s'il s'agit d'une version 64 bits, il affichera clairement l'erreur de non-concordance alors essayez de réinstaller la version 32 bits de java et exécutez le programme java dans la commande de c:\windows\sysWOW64\odbcad32.exe(le plus simple à copier et coller dans la boîte de dialogue d'exécution) c'est assez que votre programme fonctionne définitivement

Savu Rajkumar
la source
0

je pense que ce sera aussi plus utile.

pour l'architecture miss match,

je viens de copier le fichier jdk du fichier 32 bits C: \ Program Files (x86) \ Java \ jdk1.7.0_71 et le coller 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 pour éviter l'erreur IDE (netbeans)

alors vous êtes prêt à partir.

Remarque: vous devez sauvegarder vos fichiers 64 bits afin de pouvoir la renvoyer à son emplacement lorsque vous souhaitez créer une application 64 bits.

assenga priva
la source
Hacky McHack Hack :(
Gareth