El DSN especificado contiene una discrepancia de arquitectura entre el controlador y la aplicación. JAVA


85

Estoy tratando de conectarme a una base de datos creada por MS Access usando Java, pero parece que no puedo administrar. Estoy usando ODBC y obtengo esta excepción:

java.sql.SQLException: [Microsoft] [ODBC Driver Manager] El DSN especificado contiene una discrepancia de arquitectura entre el controlador y la aplicación

Mi 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
¿Está utilizando un jvm de 64 bits? Si es así, necesita un controlador odbc de 64 bits.
dogbane

1
Sí, creo que lo soy. Encontré la versión de 64 bits del odbc en C: \ Windows \ SysWOW64 pero no es la misma que enciende el panel de control.
user1028408

No puedo instalar el controlador de 64 bits porque mis otros productos de oficina son de 32 bits: /
DavidVdd

Respuestas:


128

Ninguno de estos lo hizo por mí. Encontré la respuesta en MSDN. Sin embargo, había indicios de ello. La arquitectura en el error se refiere a 32 vs 64 bits. Mi solución fue averiguar en qué aplicación se está ejecutando (Access) qué 2010 es 32b. Encontré esto buscando en la pestaña Proceso del Administrador de tareas, donde todos los procesos 32b tienen * 32 al final de sus nombres. Como se dijo, el panel de control lanzará la versión de 64 bits de ODBC desde aquí

c:\windows\system32\odbcad32.exe

y la versión de 32 bits está aquí:

c:\windows\sysWOW64\odbcad32.exe (más fácil de copiar y pegar en el diálogo de ejecución)

Así que configuré DSN con nombres que terminaban en 32 y 64 en cada uno de los paneles de control ODBC correspondientes (AKA Administrator) que apuntaban a lo mismo. Luego, elegí la correcta en función de si la aplicación que la usa es 32b o 64b.


Probé la versión de 64 bits y la ejecuté como administrador, ¡pero tampoco funciona!
Fatima Zohra

2
Debe haber armonía de bits. Si la aplicación es 32, debe haber una configuración de 32 bits para ella. Si la aplicación es 64, debes tener una que sea 64. No intenté crear configuraciones con el mismo nombre porque no quería que se desincronizaran (olvídate de cambiar ambas al mismo tiempo). No me diste suficiente información para intentar ofrecer sugerencias. Espero que lo hayas descubierto. (¿¿Por qué no pueden hacer algo tan simple y crear una aplicación de 64 bits que configure entornos de 64 y 32 bits?)
Pecos Bill

Y como se indicó a continuación, aunque no es obvio, los controladores involucrados también tienen que coincidir (probablemente sea mejor instalar tanto el 32 como el 64), aunque no creo que pueda elegir el controlador si no fuera la arquitectura adecuada.
Pecos Bill

Esto también me ayudó a descifrar por qué mi Excel de 32 bits no podía conectarse a nuestro servidor Hadoop Hive utilizando el controlador ODBC de Cloudea Hive de 64 bits. Una vez que cambié al conector de 32 bits, ¡funcionó muy bien!
Mark Vickery

2
Para que quede claro: no puede configurar una conexión ODBC PostgreSQL de 32 bits a través de la GUI de Windows normal en un sistema de 64 bits. En su lugar, debe cerrar el Administrador de fuente de datos ODBC (si está abierto actualmente), ejecutar c:\windows\sysWOW64\odbcad32.exey configurar la conexión desde allí. Luego, puede usar esa conexión en un programa de 32 bits para acceder a la base de datos.
Ajedi32

26

Obtiene exactamente este mismo error cuando intenta conectarse a una base de datos MySQL desde MS-Access cuando la versión de bits (32 vs 64) de Access no coincide

  1. la versión de bits del controlador ODBC que está utilizando
  2. la versión de bits del ODBC Manager que usó para configurarlo.

Para aquellos de ustedes que intentan conectar MS-Access a MySQL en un sistema Windows de 64 bits, pasé por una auténtica tortura tratando de que funcionara tanto con MS-Access 2010 como con MS-Access 2013. Finalmente lo hice funcionar, y aquí están las lecciones que he aprendido en el camino:

Compré una nueva computadora portátil con Windows 7, 64 bits, y tengo una aplicación que se basa en MS-Access usando tablas MySQL.

  1. Instalé la última versión de MySQL, 5.6, usando la instalación del paquete All In One. Esto le permite instalar tanto la base de datos como los controladores ODBC al mismo tiempo. Eso es bueno, pero el controlador ODBC que instala parece ser el de 64 bits, por lo que no funcionará con MS-Access de 32 bits. También parece un poco defectuoso, no estoy seguro de eso. Cuando agrega un nuevo DSN en el Administrador de ODBC, este controlador aparece como "Microsoft ODBC para Oracle". No pude hacer que este funcionara. Tuve que instalar el de 32 bits, que se comenta a continuación.

    • MySQL funcionó bien después de la instalación. He restaurado la base de datos MySQL de mi aplicación de la forma habitual. Ahora quiero conectarme a él usando MS-Access.


  2. Ya había instalado Office 2013, que supuse era de 64 bits. Pero al verificar la versión (Archivo, Cuenta, Acerca del acceso), veo que es de 32 bits. Tanto Access 2010 como 2013 se venden más comúnmente como versiones de 32 bits.

  3. Mi máquina es una máquina de 64 bits. Entonces, de manera predeterminada, cuando configura sus DSN para MS-Access, y entra de la manera habitual en el Administrador de ODBC a través del Panel de control, Opciones administrativas, obtiene el administrador de ODBC de 64 bits. ¡No tienes forma de saberlo! No puedes decirlo. ¡¡Esto es un gran problema !! Es imposible configurar un DSN desde allí y conectarlo correctamente a MS Access de 32 bits. Obtendrá el temido error:

    "el dsn especificado contiene una discrepancia de arquitectura ..."

  4. Debe descargar e instalar el controlador ODBC de 32 bits de MySQL. Usé la versión 3.5.1

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

  5. Debe decirle al Administrador ODBC en el Panel de control que realice una caminata y, en su lugar, debe invocar explícitamente el Administrador ODBC de 32 bits con este comando ejecutado en Inicio, Símbolo del sistema:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Creé un acceso directo a esto en mi escritorio. Desde aquí, cree su DSN con este administrador. Punto importante: CONSTRUYE COMO DSNS DE SISTEMA, NO DSNS DE USUARIO. Esto me hizo tropezar por un tiempo.

    Por cierto, la versión de 64 bits del ODBC Manager también se puede ejecutar explícitamente como:

    c: \ windows \ system32 \ odbcad32.exe

  6. Una vez que haya instalado el controlador ODBC de 32 bits de MySql, cuando haga clic en Agregar en el Administrador ODBC, verá 2 controladores en la lista. Elija "Controlador ANSI MySQL ODBC 5.2". No probé el controlador UNICODE.


Eso lo hace. Una vez que haya definido sus DSN en el administrador ODBC de 32 bits, puede conectarse a MySQL de la forma habitual desde Access: datos externos, base de datos ODBC, enlace a la base de datos, seleccione la fuente de datos de la máquina y el DSN que creó en su MySQL la base de datos estará allí.


2
Creo que 32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
cambiaste

3
@Jrgns No, no están cambiados. sysWOW64es en realidad el directorio de 32 bits. A Windows le encanta ser confuso. Sabrá qué versión está utilizando porque se mostrará (32 bits) o (64 bits) en la barra de título del Administrador de fuentes de datos ODBC.
Tim Leaf

8

Hay un desajuste de arquitectura. Su controlador JDBC y su JDK deben tener la misma arquitectura. Si usa un controlador de 32 bits y su JDK es de 64 bits, obtendrá ese error.

Ver esto

Solución: depende de su arquitectura.

Necesitará controladores de 64 bits si su Java es de 64 bits.

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


Lo descargué y probé la nueva cadena de conexión como se especificó en las instrucciones, pero aún así no funcionó. ¿Quizás estoy haciendo algo mal?
user1028408

2

Vi esta respuesta y funcionó para mí. https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

Después de haber instalado un controlador ODBC desde el programa de instalación del controlador, puede definir una o más fuentes de datos para él. El nombre de la fuente de datos (DSN) debe proporcionar una descripción única de los datos; por ejemplo, Nómina o Cuentas a pagar. Las fuentes de datos del sistema y del usuario que se definen para todos los controladores instalados actualmente se enumeran en las pestañas DSN de usuario o DSN del sistema del cuadro de diálogo Administrador de fuente de datos ODBC. Las fuentes de datos de archivo en un directorio determinado se enumeran en la pestaña DSN de archivo; el directorio que se mostrará se ingresa en el cuadro Buscar en en la pestaña Archivo DSN. System_CAPS_noteNote

Para administrar una fuente de datos que se conecta a un controlador de 32 bits en una plataforma de 64 bits, use c: \ windows \ sysWOW64 \ odbcad32.exe. Para administrar una fuente de datos que se conecta a un controlador de 64 bits, use c: \ windows \ system32 \ odbcad32.exe. En Herramientas administrativas en un sistema operativo Windows 8 de 64 bits, hay iconos para el cuadro de diálogo Administrador de fuente de datos ODBC de 32 bits y 64 bits.

Si utiliza odbcad32.exe de 64 bits para configurar o eliminar un DSN que se conecta a un controlador de 32 bits, por ejemplo, Driver do Microsoft Access (* .mdb), recibirá el siguiente mensaje de error:

El DSN especificado contiene una discrepancia de arquitectura entre el controlador y la aplicación

Para resolver este error, utilice odbcad32.exe de 32 bits para configurar o eliminar el DSN.

Una fuente de datos asocia un controlador ODBC en particular con los datos a los que desea acceder a través de ese controlador. Por ejemplo, puede crear una fuente de datos para usar el controlador ODBC dBASE para acceder a uno o más archivos dBASE que se encuentran en un directorio específico en su disco duro o una unidad de red. Con el Administrador de fuentes de datos ODBC, puede agregar, modificar y eliminar fuentes de datos, como se describe en la siguiente tabla.


Hola Bineesh Kumar, ¿podría explicar por favor breafly?
Raj Kumar

2

De forma predeterminada, el símbolo del sistema está conectado a System32. Ejecutar un símbolo del sistema de 64 bits, es decir, C:\WINDOWS\SYSWOW64\CMD.EXE. En eso, compile y ejecute su aplicación java.


2

Para resolver este problema, primero asegúrese de que su software java debe ser una versión de 32 bits si es una versión de 64 bits claramente mostrará el error de falta de coincidencia, así que intente volver a instalar 32 bits de la versión de java y ejecute el programa java en el comando de c: \ windows \ sysWOW64 \ odbcad32.exe (el más fácil de copiar y pegar en el cuadro de diálogo de ejecución) es suficiente para que su programa funcione definitivamente


1

El problema al que se enfrentaba podría deberse a que: tenía Office de 32 bits y Símbolo del sistema de 64 bits. Para resolver el problema, debe seguir 2 pasos:

  1. Abra ODBC Manager para DSN usando: C: \ Windows \ SysWOW64 \ odbcad32.exe. Esto abrirá ODBC Data Administrator para la versión de 32 bits y verá todos los controladores de la base de datos.

  2. Después de esto, debe abrir el símbolo del sistema de 32 bits usando: C: \ Windows \ SysWOW64 \ cmd.exe Esto abrirá la versión de 32 bits del símbolo del sistema. En esta nueva CMD, vuelva a compilar su programa Java y ejecútelo.

Espero que esto ayude.


1

Un poco tarde, pero como me encontré con el mismo problema, en su escenario exacto, pensé que agregaría mi solución.

Tengo Windows 7 (64 bits) y Office 2010 (32 bits). Intenté con la cadena de conexión sin DSN:

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

y lo intenté con la conexión DSN, usando las versiones System32 y SysWOW64 del ODBC Admin, y nada de eso funcionó.

Lo que finalmente funcionó fue hacer coincidir la versión de bits de Java con la versión de bits de Office. Una vez que hice eso, pude usar el modo de conexión DSN o DSN menos, sin ningún problema.


Dije esto por la respuesta de Mob, pero gracias por confirmar. ¡Que desastre!
Kevin Bowersox

0

¿Ha creado primero el DSN en Panel de control> Herramientas administrativas> ODBC> DSN del sistema? Nómbrelo igual que "myDatabase" y si estoy pidiendo localizar la base de datos / archivo de acceso, especifique la ruta usando la opción de exploración. Una vez que su DSN se haya creado con éxito, podrá acceder fácilmente a su base de datos.


Creé mi DSN con el ODBC que encontré en C: \ Windows \ SysWOW64 ... El del panel de control casi no tenía controladores para guardar los del servidor sql.
user1028408

entonces debe instalar los controladores porque sin esos controladores no puede establecer una conexión ODBC.
Ankur Jain

¿Tiene un enlace a estos controladores? Intenté instalar algunos pero no funcionaron.
user1028408


Los descargué y sustituí la cadena de conexión: Connection dbConnection = DriverManager.getConnection ("Driver = {Microsoft Access Driver (*. Mdb, * .accdb)}; DBQ = C: \\ Users \\ Owner \\ Documents \\ myDatabase .mdb "," admin "," "); pero todavía me está dando problemas. ¿Quizás necesito cambiar algo más en el código?
user1028408

0

Si está utilizando netbeans, vaya a herramientas-> plataforma java, cambie jdk_home que apunta a c: / programfiles / java / jdk1_7 a c: programFiles (x86) / java / jdk1_6_21

si no es editable, busque netbeans.cnf y realice el cambio como se indicó anteriormente para jdk_home. reinicie neatbeans y cómo funciona tuve el mismo problema, pero funcioné.


0

Tuve muchos problemas para vincularme a MySQL desde una computadora portátil de 64 bits, con Windows 7, usando MS Access 2010. Encontré el artículo anterior muy útil, pero todavía no pude conectarme usando odbc 3.5.1. Como anteriormente había vinculado una máquina de 32 bits usando Connector / ODBC 5.1.13, descargué esa versión y la configuré siguiendo las instrucciones anteriores. Éxito. La respuesta parece ser probar diferentes versiones de Connector.odbc.


0

Si se conecta desde una plataforma de 64 bits utilizando un controlador de 32 bits, ejecute el ejecutable C: \ Windows \ SysWOW64 \ odbcad32.exe y cree el DSN. Funcionará.


0

Me encontré con este problema al actualizar a un servidor de Windows 7 con algunas aplicaciones CLASP heredadas. Intentando ejecutar una aplicación de 32 bits en una máquina de 64 bits.

Intente configurar la compatibilidad de 32 bits de los grupos de aplicaciones en True y / o cree dsn en 32 y 64 bits.

Abra la ventana de la fuente de datos odbc en ambas versiones desde el cuadro de ejecución. C: \ Windows \ SysWOW64 \ odbcad32.exe C: \ Windows \ system32 \ odbcad32.exe


0

Encontré este problema. Esto se debe a la arquitectura de su computadora y a la arquitectura de la base de datos que está utilizando.

Si está utilizando un sistema operativo de 32 bits, entonces todo funciona bien porque solo puede instalar software de 32 bits. El problema surge cuando estás usando el sistema operativo de 64 bits.

Para resolver este problema es simple: me tomó mucho tiempo descubrir este problema.

  1. Saber que su sistema operativo es de 64 bits, pero su Microsoft Office es de 32 bits.
  2. Entonces, para que pueda acceder a su base de datos usando NetBean IDE (asumiendo que está usando esto), necesita instalar JDK de 32 bits. Si ha instalado 64 bits, debe desinstalarlo e instalar el de 32 bits.

No puede acceder a su base de datos porque su JVM de 64 bits no es lo mismo que la JVM de 32 bits.

Para agregar su base de datos a su sistema 1. Panel de control 2. Herramientas de administrador 3. Fuente de datos (ODBC) haga clic con el botón derecho en él cambie el destino a \ sysWOW64 \ odbcad32.exe cambie el inicio en r% \ SysWOW64

Entonces deberías poder correr. Infórmeme si tiene algún problema con esto.

¡Gracias!


0

He solucionado el error.

Sigue los pasos:

  1. Instalar JDK de la versión 32bt
  2. Instalar MS-Office 2007
  3. Configure el panel de control: a. Panel de control b. Herramientas de administrador c. Fuente de datos (ODBC)

    haga clic derecho sobre él cambiar el objetivo para \sysWOW64\odbcad32.execambiar el inicio enr%\SysWOW64

Ejecútalo y Mejor Suerte. Funciona en Windows 7 y 8

Elimine la versión más reciente de MS-Office e instale solo MS-Office 2007 si el problema persiste


0

Para resolver este problema, primero asegúrese de que su software java debe ser una versión de 32 bits si es una versión de 64 bits claramente, mostrará el error de falta de coincidencia, así que intente volver a instalar 32 bits de la versión de java y ejecute el programa java en el comando de c:\windows\sysWOW64\odbcad32.exe(más fácil de copiar y pegar en el cuadro de diálogo de ejecución) es suficiente, su programa definitivamente funciona


0

Creo que esto también será más útil.

por la arquitectura miss match,

Simplemente copio el archivo jdk del archivo de 32 bits C: \ Archivos de programa (x86) \ Java \ jdk1.7.0_71 y lo pego en el archivo de 64 bits C: \ Archivos de programa \ Java \ jdk1.7.0_10, luego cambie el nombre del archivo para que coincida con el archivo que reemplaza para evitar el error IDE (netbeans)

entonces estás listo.

nota: debe respaldar sus archivos de 64 bits para que, cuando desee crear una aplicación de 64 bits, pueda devolverla a su ubicación


Hacky McHack Hack :(
Gareth

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.