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);
}
}
}
Respostas:
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.
fonte
c:\windows\sysWOW64\odbcad32.exe
e 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.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
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.
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.
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.
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:
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
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:
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:
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á.
fonte
32 bit: c:\windows\system32\odbcad32.exe
64 bit: c:\windows\sysWOW64\odbcad32.exe
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.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
fonte
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.
fonte
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.fonte
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
fonte
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:
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.
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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
fonte
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.
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!
fonte
Eu corrigi o erro.
Siga os passos:
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.exe
mudar 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
fonte
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 definitivamentefonte
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
fonte
Acesse este link e baixe o driver ODBC para o sistema operacional de 64 bits.
http://www.microsoft.com/en-us/download/details.aspx?id=13255
fonte