O DSN especificado contém uma incompatibilidade de arquitetura entre o driver e o aplicativo. JAVA


86

Estou tentando me conectar a um banco de dados feito pelo MS Access usando Java, mas não consigo. Estou usando ODBC e estou recebendo esta exceção:

java.sql.SQLException: [Microsoft] [ODBC Driver Manager] O DSN especificado contém uma incompatibilidade de arquitetura entre o driver e o aplicativo

Meu 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
Você está usando um jvm de 64 bits? Nesse caso, você precisa de um driver odbc de 64 bits.
dogbane

1
Sim, acho que estou. Encontrei a versão de 64 bits do odbc em C: \ Windows \ SysWOW64 mas não é o mesmo que o painel de controle liga.
user1028408

Não consigo instalar o driver de 64 bits porque meus outros produtos de escritório são de 32 bits: /
DavidVdd

Respostas:


130

Nenhum desses fez isso por mim. Eu encontrei a resposta no MSDN. No entanto, havia dicas para isso. A arquitetura do erro se refere a 32 x 64 bits. Minha solução foi descobrir em qual meu aplicativo está sendo executado (Access), que 2010 é 32b. Eu descobri isso procurando na guia Processo do Gerenciador de Tarefas, onde todos os processos 32b têm * 32 no final de seus nomes. Como foi dito, o painel de controle irá lançar a versão de 64 bits do ODBC a partir daqui

c:\windows\system32\odbcad32.exe

e a versão de 32 bits está aqui:

c:\windows\sysWOW64\odbcad32.exe (mais fácil de copiar e colar na caixa de diálogo de execução)

Portanto, configurei DSNs com nomes terminando em 32 e 64 em cada um dos painéis de controle ODBC correspondentes (também conhecido como Administrador) que apontavam para a mesma coisa. Então, eu escolhi / escolhi o correto com base no fato de o aplicativo que o usar é 32b ou 64b.


Tentei a versão de 64 bits e executei-a como administrador, mas também não funciona !!
Fatima Zohra

2
Deve haver harmonia de bits. Se o aplicativo for 32, deve haver uma configuração de 32 bits para ele. Se o aplicativo for 64, você deve ter um 64. Não tentei criar configurações com o mesmo nome porque não queria que ficassem fora de sincronia (esqueça de alterar os dois ao mesmo tempo). Você não me deu informações suficientes para tentar oferecer sugestões. Eu espero que você tenha descoberto. (Por que eles não podem fazer a coisa tão simples e criar um aplicativo de 64 bits que configure ambientes de 64 e 32 bits ???)
Pecos Bill,

E como foi declarado abaixo, mas não é óbvio, os drivers envolvidos também devem corresponder (provavelmente é melhor instalar o 32 e o 64), embora eu não ache que você possa escolher o driver se não for a arquitetura adequada.
Pecos Bill,

Isso também me ajudou a decifrar por que meu Excel de 32 bits não pôde se conectar ao nosso Hadoop Hive Server usando o driver ODBC Cloudea Hive de 64 bits. Depois que mudei para o conector de 32 bits, funcionou muito bem!
Mark Vickery

2
Portanto, para ser claro: você não pode configurar uma conexão ODBC PostgreSQL de 32 bits por meio da GUI normal do Windows em um sistema de 64 bits. Em vez disso, você precisa fechar o Administrador de fonte de dados ODBC (se estiver aberto), executar c:\windows\sysWOW64\odbcad32.exee configurar a conexão a partir dele. Depois, você pode usar essa conexão em um programa de 32 bits para acessar o banco de dados.
Ajedi32 de

26

Você obtém exatamente o mesmo erro ao tentar se conectar a um banco de dados MySQL do MS-Access quando a versão de bits (32 vs 64) do Access não corresponde

  1. a versão bit do driver ODBC que você está usando
  2. a versão bit do ODBC Manager que você usou para configurá-lo.

Para aqueles de vocês que estão tentando conectar o MS-Access ao MySQL em um sistema Windows de 64 bits, passei por uma tortura total tentando fazê-lo funcionar com o MS-Access 2010 e o MS-Access 2013. Finalmente consegui funcionar, e aqui estão as lições que aprendi ao longo do caminho:

Comprei um novo laptop Windows 7 de 64 bits e tenho um aplicativo que usa MS-Access usando tabelas MySQL.

  1. Instalei a versão mais recente do MySQL, 5.6, usando a instalação do pacote All In One. Isso permite que você instale o banco de dados e os drivers ODBC de uma vez. Isso é bom, mas o driver ODBC que ele instala parece ser de 64 bits, então não funcionará com o MS-Access de 32 bits. Também parece um pouco bugado - não tenho certeza sobre isso. Quando você adiciona um novo DSN no ODBC Manager, este driver aparece como "Microsoft ODBC para Oracle". Eu não consegui fazer este funcionar. Tive que instalar o de 32 bits, discutido abaixo.

    • O MySQL estava funcionando bem após a instalação. Restaurei meu banco de dados MySQL do aplicativo da maneira usual. Agora quero me conectar a ele usando o MS-Access.


  2. Eu já tinha instalado o Office 2013, que presumi ser de 64 bits. Mas ao verificar a versão (Arquivo, Conta, Sobre Acesso), vejo que é de 32 bits. Tanto o Access 2010 quanto o 2013 são mais comumente vendidos como versões de 32 bits.

  3. Minha máquina é uma máquina de 64 bits. Portanto, por padrão, quando você vai configurar seu DSN para MS-Access e vai da maneira usual para o Gerenciador ODBC via Painel de Controle, Opções Administrativas, você obtém o gerenciador ODBC de 64 bits. Você não tem como saber disso! Você simplesmente não pode dizer. Este é um grande problema !! É impossível configurar um DSN de lá e conectá-lo com êxito ao MS Access de 32 bits. Você obterá o temido erro:

    "o dsn especificado contém uma incompatibilidade de arquitetura ..."

  4. Você deve baixar e instalar o driver ODBC de 32 bits do MySQL. Usei a versão 3.5.1

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

  5. Você deve dizer ao ODBC Manager no Painel de Controle para fazer uma caminhada e, em vez disso, deve invocar explicitamente o ODBC Manager de 32 bits com este comando executado em Iniciar, prompt de comando:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Criei um atalho para isso na minha área de trabalho. A partir daqui, construa seu DSN com este gerenciador. Ponto importante: CONSTRUA-OS COMO DSNS DE SISTEMA, NÃO DSNS DE USUÁRIO! Isso me fez tropeçar por um tempo.

    A propósito, a versão de 64 bits do ODBC Manager também pode ser executada explicitamente como:

    c: \ windows \ system32 \ odbcad32.exe

  6. Depois de instalar o driver ODBC de 32 bits do MySql, ao clicar em Adicionar no gerenciador ODBC, você verá 2 drivers listados. Escolha "Driver MySQL ODBC 5.2 ANSI". Não experimentei o driver UNICODE.


Isso resolve. Depois de definir seus DSNs no gerenciador ODBC de 32 bits, você pode se conectar ao MySQL da maneira usual em Access - Dados externos, Banco de dados ODBC, Link para o banco de dados, selecione Machine Data Source e o DSN que você criou para seu MySQL o banco de dados estará lá.


2
Acho que você trocou os caminhos dos dois Gerentes ODBC32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
Jrgns

3
@Jrgns Não, eles não são trocados. sysWOW64é na verdade o diretório de 32 bits. O Windows adora ser confuso. Você saberá qual versão está usando porque ela aparecerá (32 bits) ou (64 bits) na barra de título do Administrador de fonte de dados ODBC.
Tim Leaf

8

Há uma incompatibilidade de arquitetura. O driver JDBC e o JDK devem ser da mesma arquitetura. Se você estiver usando o driver de 32 bits e o JDK for de 64 bits, você receberá esse erro.

Veja isso

Correção: depende da sua arquitetura.

Você precisará de drivers de 64 bits se o seu Java for de 64 bits.

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


Eu baixei e tentei a nova seqüência de conexão conforme especificado nas instruções, mas ainda não funcionou. Talvez eu esteja fazendo algo errado?
user1028408

2

Eu vi essa resposta e funcionou para mim. https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

Depois de instalar um driver ODBC a partir do programa de configuração do driver, você pode definir uma ou mais fontes de dados para ele. O nome da fonte de dados (DSN) deve fornecer uma descrição exclusiva dos dados; por exemplo, folha de pagamento ou contas a pagar. As fontes de dados do usuário e do sistema definidas para todos os drivers atualmente instalados são listadas nas guias DSN do usuário ou DSN do sistema da caixa de diálogo Administrador da fonte de dados ODBC. As fontes de dados de arquivo em um determinado diretório são listadas na guia DSN de arquivo; o diretório a ser mostrado é inserido na caixa Examinar na guia DSN de arquivo. System_CAPS_noteNote

Para gerenciar uma fonte de dados que se conecta a um driver de 32 bits na plataforma de 64 bits, use c: \ windows \ sysWOW64 \ odbcad32.exe. Para gerenciar uma fonte de dados que se conecta a um driver de 64 bits, use c: \ windows \ system32 \ odbcad32.exe. Em Ferramentas Administrativas em um sistema operacional Windows 8 de 64 bits, há ícones para as caixas de diálogo Administrador de fonte de dados ODBC de 32 e 64 bits.

Se você usar o odbcad32.exe de 64 bits para configurar ou remover um DSN que se conecta a um driver de 32 bits, por exemplo, Driver do Microsoft Access (* .mdb), receberá a seguinte mensagem de erro:

O DSN especificado contém uma incompatibilidade de arquitetura entre o driver e o aplicativo

Para resolver esse erro, use o odbcad32.exe de 32 bits para configurar ou remover o DSN.

Uma fonte de dados associa um driver ODBC específico aos dados que você deseja acessar por meio desse driver. Por exemplo, você pode criar uma fonte de dados para usar o driver ODBC dBASE para acessar um ou mais arquivos dBASE encontrados em um diretório específico em seu disco rígido ou uma unidade de rede. Usando o Administrador de fonte de dados ODBC, você pode adicionar, modificar e excluir fontes de dados, conforme descrito na tabela a seguir.


Olá, Bineesh Kumar, por favor, explique brefly
Raj Kumar,

2

Por padrão, o Prompt de Comando está conectado ao System32. Execute um prompt de comando de 64 bits, ou seja C:\WINDOWS\SYSWOW64\CMD.EXE,. Nele, compile e execute seu aplicativo java.


2

Para resolver este problema, primeiro certifique-se de que seu software java deve ser de 32 bits se for de 64 bits claramente ele mostrará o erro de incompatibilidade, então tente reinstalar 32 bits da versão java e execute o programa java no comando de c: \ windows \ sysWOW64 \ odbcad32.exe (mais fácil de copiar e colar na caixa de diálogo de execução) é o suficiente para que seu programa funcione definitivamente


1

O problema que você estava enfrentando pode ser o seguinte: você estava usando o Office de 32 bits e o prompt de comando de 64 bits. Para resolver o problema, você precisa seguir 2 etapas:

  1. Abra o ODBC Manager para DSN usando: C: \ Windows \ SysWOW64 \ odbcad32.exe Isso abrirá o ODBC Data Administrator para a versão de 32 bits e você verá todos os drivers de banco de dados.

  2. Depois disso, você precisa abrir o prompt de comando de 32 bits usando: C: \ Windows \ SysWOW64 \ cmd.exe Isso abrirá a versão de 32 bits do prompt de comando. Neste novo CMD, recompile seu programa Java e execute seu programa.

Espero que isso ajude.


1

Um pouco tarde, mas como me deparei com o mesmo problema, no seu cenário exato, decidi adicionar minha solução.

Tenho Windows 7 (64 bits) e Office 2010 (32 bits). Tentei com a string de conexão sem DSN:

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

e tentei com a conexão DSN, usando as versões System32 e SysWOW64 do ODBC Admin, e nada funcionou.

O que finalmente funcionou foi combinar a versão bit do Java com a versão bit do Office. Depois de fazer isso, poderia usar o modo de conexão DSN ou DSN less, sem qualquer problema.


Impliquei isso da resposta da Mob, mas obrigado por confirmar. Que bagunça!
Kevin Bowersox

0

Você criou o DSN primeiro em Painel de controle> Ferramentas administrativas> ODBC> DSN do sistema. Nomeie-o com o mesmo nome de "myDatabase" e se eu estiver solicitando a localização do arquivo de banco de dados / acesso, especifique o caminho usando a opção de navegação. Uma vez que seu DSN for criado com sucesso, você poderá acessar facilmente seu banco de dados.


Criei meu DSN com o ODBC que encontrei em C: \ Windows \ SysWOW64 ... O do painel de controle quase não tinha drivers, exceto os do sql server.
user1028408

então você deve instalar os drivers porque sem eles você não pode fazer a conexão ODBC.
Ankur Jain

você tem um link para esses drivers? Tentei instalar alguns, mas não funcionaram.
user1028408


Fiz o download e substituí a string de conexão: Connection dbConnection = DriverManager.getConnection ("Driver = {Microsoft Access Driver (*. Mdb, * .accdb)}; DBQ = C: \\ Usuários \\ Proprietário \\ Documentos \\ myDatabase .mdb "," admin "," "); mas ainda está me dando problemas. Talvez eu precise alterar algo mais no código?
user1028408

0

Se você estiver usando netbeans, vá para tools-> java Platform, altere jdk_home que aponta para c: / programfiles / java / jdk1_7 para c: programFiles (x86) / java / jdk1_6_21

se não for editável, encontre netbeans.cnf e faça as alterações conforme declarado acima para jdk_home. reinicie o neatbeans e como funciona Tive o mesmo problema, mas funcionou.


0

Tive muitos problemas para me conectar ao MySQL de um laptop de 64 bits, executando o Windows 7, usando o MS Access 2010. Achei o artigo anterior muito útil, mas ainda não consegui conectar usando o odbc 3.5.1. Como já havia vinculado uma máquina de 32 bits usando Connector / ODBC 5.1.13, baixei essa versão e a configurei usando as instruções acima. Sucesso. A resposta parece ser tentar diferentes versões do Connector.odbc.


0

Se você estiver se conectando de uma plataforma de 64 bits usando um driver de 32 bits, execute o executável C: \ Windows \ SysWOW64 \ odbcad32.exe e crie o DSN. Vai funcionar.


0

Eu tive esse problema ao atualizar para um servidor Windows 7 com alguns aplicativos CLASP legados. Tentando executar um aplicativo de 32 bits em uma máquina de 64 bits.

Tente definir a compatibilidade de 32 bits dos pools de aplicativos como True e / ou criar DSNs em 32 e 64 bits.

Abra a janela da fonte de dados odbc em ambas as versões na caixa de execução. C: \ Windows \ SysWOW64 \ odbcad32.exe C: \ Windows \ system32 \ odbcad32.exe


0

Eu encontrei esse problema. Isso se deve à arquitetura do seu computador e à arquitetura do banco de dados que você está usando.

Se estiver usando um sistema operacional de 32 bits, tudo funciona bem porque você só pode instalar software de 32 bits. O problema surge quando você está usando o sistema operacional de 64 bits.

Para resolver este problema é simples - demorei muito a descobrir este problema.

  1. Saber que seu sistema operacional é de 64 bits, mas seu Microsoft Office é de 32 bits.
  2. Portanto, para acessar seu banco de dados usando o NetBean IDE (supondo que você esteja usando isso), você precisa instalar o JDK de 32 bits. Se você instalou 64 bits, deverá desinstalá-lo e instalar os 32 bits.

Você não consegue acessar seu banco de dados porque seu JVM de 64 bits não é o mesmo que JVM de 32 bits.

Para adicionar seu banco de dados ao sistema 1. Painel de controle 2. Ferramentas do administrador 3. Fonte de dados (ODBC) clique com o botão direito sobre ele altere o destino para \ sysWOW64 \ odbcad32.exe altere o início em r% \ SysWOW64

Então você deve ser capaz de correr. Informe-me se você tiver algum problema com isso.

Obrigado!


0

Eu corrigi o erro.

Siga os passos:

  1. Instale JDK da versão 32bt
  2. Instale o MS-Office 2007
  3. Configure o painel de controle: a. Painel de controle b. Ferramentas do administrador c. Fonte de dados (ODBC)

    clique com o botão direito sobre ele mude o alvo para \sysWOW64\odbcad32.exemudar o início parar%\SysWOW64

Execute-o e boa sorte. Funciona no Windows 7, bem como no 8

Remova a versão mais recente do MS-Office e instale apenas o MS-Office 2007 se o problema ainda persistir


0

Para resolver este problema, primeiro certifique-se de que o seu software java deve ser de 32 bits se for de 64 bits claramente ele mostrará o erro de incompatibilidade, então tente reinstalar 32 bits da versão java e execute o programa java no comando de c:\windows\sysWOW64\odbcad32.exe(mais fácil de copiar e colar na caixa de diálogo de execução) é o suficiente para que seu programa funcione definitivamente


0

acho que isso também será mais útil.

para o jogo de falha de arquitetura,

Basta copiar o arquivo jdk do arquivo de 32 bits C: \ Arquivos de programas (x86) \ Java \ jdk1.7.0_71 e colá-lo no arquivo de 64 bits C: \ Arquivos de programas \ Java \ jdk1.7.0_10, então renomeie o arquivo para coincidir com o arquivo que você substitui para evitar o erro IDE (netbeans)

então você está pronto para ir.

nota: você deve preparar seus arquivos de 64 bits para que, quando quiser criar um aplicativo de 64 bits, você possa devolvê-lo ao local


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.