Java, acessando banco de dados MS-Access em Windows 64bits
Introdução
Neste artigo vamos aprender como acessar um banco de dados MS-Access pelo Java. No caso, estaremos com o Windows instalado em uma arquitetura 64bits. Mesmo estando na arquitetura 64bits, o Windows ainda distribui os drivers ODBC do MS-Access em arquitetura 32bits (Pelo menos no Windows 7). Portanto, para que o Java possa usar o driver ODBC do Ms-Access, teremos que rodar o Java em uma JVM de arquitetura 32bits.
Configurando o ODBC
O primeiro passo é configurar um data source no administrador de fonte de dados ODBC do Windows. Como estamos usando o Windows 64bits, abra o odbcad32.exe no seguitne caminho:
C:\Windows\SysWOW64\odbcad32.exe
PS: Não acesse o odbcad32.exe dentro do diretório System32, pois não funcionará corretamente devido a arquitetura do Windows ser 64bits.
Após aberto o gerenciador de fonte de dados, clique na aba “Fonte de dados do Sistema”, em seguida, clique no botão Adicionar, para adicionar uma nova fonte de dados.
Selecione o Microsoft Access Driver como tipo de driver para fonte de dados. No meu caso, preciso conectar em um banco de dados MS-Access com extensão .accdb:
Na próxima tela informe o nome da fonte de dados. Esse nome será usado para identificar o banco de dados na hora do acesso (Vamos usar esse nome em nosso programa Java).
Clique no botão Selecionar e escolha o banco de dados MS-Access. (No meu caso é um arquivo com extensão .accdb) e clicar em OK:
Criando o aplicativo Java
O código abaixo é um exemplo de como fazer o Java conectar em um banco de dados MS-Access. Verificar no próprio código, os comentários para qualquer dúvida.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * Classe responsável por gerenciar conexões com banco de dados MS-Access * @author Douglas.Pasqua * */ public class AccessConnect { private static final String username = ""; private static final String password = ""; private static final String DSN = "DatabaseUsuarios"; // nome da fonte de dados private static final String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; // driver usado private static Connection conn = null; /** * retorna uma conexão com o banco de dados Access. * Utiliza o Design Pattern Singleton */ public static Connection getConnection() throws Exception { if(conn == null) { String url = "jdbc:odbc:" + DSN; Class.forName(driver); conn = DriverManager.getConnection(url, username, password); } return conn; } /** * Fecha a conexão com o Banco de dados access * Chamar esse método ao sair da aplicação */ public static void close() { if(conn != null) { try { conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } finally { conn = null; } } } /** * Exemplo de teste da classe de conexão com o * Access */ public static void main(String[] args) { try { // inicilizando a conexão Connection conn = AccessConnect.getConnection(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("SELECT nome FROM usuario"); // temos uma tabela usuario com o campo nome while(rs.next()) { String nome = rs.getString("nome"); System.out.println("Nome: " + nome); } // fechando a conexão AccessConnect.close(); } catch (Exception e) { e.printStackTrace(); } } }
Ao executar o código acima, caso esteja em uma arquitetura 64bits, provavelmente a jvm usada também estará em 64bits, você obterá a seguinte Exception:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] O DSN especificado contém uma incompatibilidade de arquiteturas entre o Driver e o Aplicativo
Como os drivers nativos do MS-Access no windows são 32bits e você esta executando o código em uma virtual machine do java em 64bits, será gerado o Exception acima. Para que você possa rodar o aplicativo sem erros, é necessário instalar o JRE do java para 32bits.
Instalando o JRE para 32bits
Para instalar o JRE versão 32bits para windows, acesse o link abaixo primeiramente:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Clique no download de JRE na versão desejada. Na próxima tela escolha a versão do java para x86. Exemplo:
jre-7u11-windows-i586.exe
Não se preocupe caso já tenha outra versão do java instalada. Não haverá conflitos. Após a instalação do JRE para 32bits, o próximo passo é executar o seu aplicativo java com essa nova jvm recém-instalada. Veremos abaixo como fazer através de linha de comando, Netbeans e Eclipse.
Executando através de linha de comando
Executar o java de 32bits através da linha de comando é simples. Basta usar o comando java do JRE de 32bits recém-instalado.
(Lembre-se que o importante é executar o bytecode do java em arquitetura 32bits. O compilador do java, javac, pode estar em outra arquitetura)
"C:Program Files (x86)Javajre7binjava" -cp . AccessConnect
Executando através do Netbeans
No diretório bin da instalação do Netbeans tem dois executáveis: Netbeans.exe e Netbeans64.exe ! Inicie o Netbeans usando o executável Netbeans.exe. Desas forma, ele usará uma jvm em 32bits para executar os arquivos java de dentro do IDE Netbeans.
Executando através do Eclipse
Primeiro, vamos configurar a JRE de 32bits instalada no processo anterior. O Eclipse permite que você configure quantas JRE forem necessárias. Depois, nas propriedades do projeto, você escolhe qual JRE deseja usar.
No Eclipse, clique em “Window -> Preferences” e depois no botão “Add”:
Na próxima tela, escolha “Standard VM” e clique em “Next”:
Na próxima tela, informe o caminho do JRE 32bits. Caso necessário, altere o campo JRE Name para não conflitar com outro JRE já instalado:
Para continuar clique em “Finish”. Depois na tela de “Preferences”, clique em Ok.
Em seguida, clique com o botão direito do mouse em cima do projeto que contém a aplicação de acesso ao Ms-Access que você deseja testar.
Vá em “Build Path -> Configure Build path”!
Na tela “Java Build Path”, clique na aba “Libraries”!
Clique na linha “JRE System Library” e em “Edit” para poder escolher o JRE que acabamos de configurar. Irá abrir uma nova tela para selecionar o JRE usado para fazer o build do projeto. No campo “Alternate JRE”, escolha a JRE que acabamos de configurar. Clique em “Finish”:
Pronto, agora você já pode rodar sua aplicação que conecta no MS-Access pelo Java.
Parabéns pela postagem. Muito esclarecedora.
Obrigado pelo feedback Alex! Boa sorte!
Cara muito obrigado salvou minha pele….Te amo!!!
Olá Renan!
Legal que te ajudou! Obrigado e boa sorte..
foi muito bom este seu post camarada adorei e consegui fazer a conexão depois de muita luta…..
Que Bom!
Obrigado!
Parabéns pelo post! o primeiro parágrafo foi suficiente pra solucionar meu problema… já havia tentado várias coisas, e o problema era a JVM de 64bits. Obrigado!!!
Muito bom Vandson, Obrigado!
Salvaste A minha pele adorei proff já procurei tanta explicação assim estava dificil
esclareceste todas as minhas duvidas e apartir do que aprendi estou a fazer coisas boas
é importante saber q existem pessoas assim boas em Java E Php
Obrigado Nicolau! E que bom que te ajudou!
Boa sorte!
Deu tudo certo obrigado por tudo proff
Sera que o Professor pode postar os procedimento para o mysql é que eu sou novissimo em java e preciso aprender muito ainda aprendis mesmo. tenho o mysql agora não sei como usalo sem ajuda
se não for ecomodo.
Olá Nicolau,
Que bom que funcionou!
Infelizmente, no momento eu não tenho previsão para escrever um artigo neste tema. Porém estou te passando o link abaixo que acredito ser uma ótima referência para o que você precisa:
http://www.vogella.com/articles/MySQLJava/article.html
Boa sorte!
Você sabe se tem como fazer esta conexão utilizando FORM Amostra Mestre/Detalhe no NETBEANS?
Olá Willy,
Eu não tenho nenhum exemplo em mãos aqui para você. Vou ficar te devendo essa. Caso consiga evoluir, se possível mande um feedback!
Obrigado e boa sorte!
Velho, tu é o cara!!!
Não tem pra ninguém!!!
Estou a 4 dias, tentando conectar a um BD Access, e tu resolveu!!!
Pesquisei em mais de 100 sites, tranquilamente, e apenas o teu tinha a solução!!!
Bala véio!!! bala!!!
Showw!! Abração!
Oi Douglas; Sua explicação com tantos detalhes foi maravilhosa e conclusiva. Antes de vê-la, eu havia pesquisado na Web e muitos tentaram, mas não conseguia resolver e rodar no Eclipse com MSAccess. Parabéns. Muito obrigado.
Que legal que funcionou Carlos!
Obrigado pelo feedback!
Abraços!