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


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

java.sql.SQLException: [Microsoft] [ODBC Driver Manager] El DSN especificado contiene una falta de coincidencia 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);
        }
    }
}

76
2018-01-17 13:56


origen


Respuestas:


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 con qué aplicación se ejecuta mi aplicación (Acceso), que 2010 es 32b. Encontré esto mirando 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á el 64 versión bit 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 terminan en 32 y 64 en cada uno de los paneles de control ODBC correspondientes (Administrador de AKA) que apuntaban a lo mismo. Luego, seleccioné / elegí la correcta según si la aplicación que la usa es 32b o 64b.


114
2017-09-21 19:59



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

  1. la versión de bit del controlador ODBC que está utilizando
  2. la versión de bit del administrador ODBC que utilizó para configurarlo.

Para aquellos de ustedes que intentan conectar MS-Access a MySQL en un sistema Windows de 64 bits, pasé por la tortura tratando de hacerlo funcionar tanto con MS-Access 2010 como con MS-Access 2013. Finalmente funcionó, y aquí están las lecciones que aprendí en el camino:

Compré una nueva computadora portátil con Windows 7 de 64 bits y tengo una aplicación que se basa en MS-Access utilizando tablas de 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 a la vez. Eso está bien, 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 problemático, no estoy seguro de eso. Cuando agrega un nuevo DSN en el Administrador ODBC, este controlador aparece como "Microsoft ODBC para Oracle". No pude hacer que esta funcione. Tuve que instalar el de 32 bits, que se analiza a continuación.

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


  2. Previamente había instalado Office 2013, que supuse que 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. Por lo tanto, de forma predeterminada, cuando vaya a configurar sus DSN para MS-Access y vaya de la manera habitual al Administrador ODBC a través del Panel de control, Opciones administrativas, obtendrá el administrador ODBC de 64 bits. ¡No tienes forma de saber eso! Usted simplemente no puede decir. ¡Esto es una gran sorpresa! Es imposible configurar un DSN desde allí y hacer que se conecte con éxito a MS Access 32 bit. Obtendrás el temido error:

    "el dsn especificado contiene una falta de coincidencia 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 indicarle al Administrador de ODBC en el Panel de control que haga una caminata y en su lugar debe invocar explícitamente el Administrador de ODBC de 32 bits con este comando ejecutado en el Inicio, Símbolo del sistema:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Creé un acceso directo a esto en mi escritorio. A partir de aquí, crea tu DSN con este administrador. Punto importante: ¡CONSTRUIRLOS COMO SISTEMAS DSNS, NO DADOS DE USUARIO! Esto me hizo tropezar por un tiempo.

    Por cierto, la versión de 64 bits del Administrador ODBC también se puede ejecutar de forma explícita 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á dos controladores en la lista. Elija "MySQL ODBC 5.2 ANSI Driver". 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 Acceso - Datos externos, Base de datos ODBC, Enlace a la Base de datos, Seleccionar origen de datos máquina y DSN que creó para su MySQL la base de datos estará allí.


23
2018-06-22 01:36



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

Ver esta

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


8
2018-01-17 14:07



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


2
2017-07-08 05:28



El problema que enfrentaste podría deberse a que: tenías Office 32 bit y Command Prompt 64 bit. Para resolver el problema, debes seguir 2 pasos:

  1. Abra ODBC Manager para DSN usando: C: \ Windows \ SysWOW64 \ odbcad32.exe Esto abrirá el administrador de datos ODBC 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 este nuevo CMD, recompile su programa Java y ejecute su programa.

Espero que esto ayude


1
2017-12-26 17:40



Un poco tarde, pero desde que me encontré con el mismo problema, en su escenario exacto, pensé en agregar 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 probé con la conexión DSN, usando las versiones System32 y SysWOW64 del Administrador ODBC, y nada de eso funcionó.

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


1
2018-05-18 22:13



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 uno o más orígenes de datos para él. El nombre de fuente de datos (DSN) debe proporcionar una descripción única de los datos; por ejemplo, nómina o cuentas por pagar. Las fuentes de datos del usuario y del sistema que están definidas para todos los controladores instalados actualmente se enumeran en las pestañas DSN del usuario o DSN del sistema del cuadro de diálogo Administrador de orígenes de datos ODBC. Las fuentes de datos de archivos en un directorio determinado se enumeran en la pestaña Archivo DSN; el directorio que se mostrará se ingresa en el cuadro Buscar 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 y de 64 bits.

Si utiliza el 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 falta de coincidencia 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 determinado controlador ODBC 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 en una unidad de red. Con el Administrador de orígenes de datos ODBC, puede agregar, modificar y eliminar orígenes de datos, tal como se describe en la siguiente tabla.


1
2017-12-07 11:01



¿Ha creado el DSN primero en el Panel de control> Herramientas administrativas> ODBC> Sistema DSN? Llámalo igual que "myDatabase" y si estoy pidiendo localizar la base de datos / archivo de acceso, especifica la ruta usando la opción de navegación. Una vez que su DSN se haya creado correctamente, podrá acceder fácilmente a su ur DB.


0
2018-01-17 14:09



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

si no es editable encuentra netbeans.cnf y haz el cambio indicado para jdk_home. reinicie Neatbeans y cómo funciona Tuve el mismo problema, pero trabajé.


0
2018-06-07 04:46



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


0
2017-12-29 20:59