Java, acessando banco de dados MS-Access em Windows 64bits

Posted on fevereiro 2, 2013. Filed under: Access, Java | Tags:, , , |

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.

ScreenShot048

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:

ScreenShot049

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:

ScreenShot050

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)\Java\jre7\bin\java" -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.

ScreenShot051

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”:

ScreenShot052

Na próxima tela, escolha “Standard VM” e clique em “Next”:

ScreenShot053

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:

ScreenShot054

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”:

ScreenShot055

Pronto, agora você já pode rodar sua aplicação que conecta no MS-Access pelo Java.

Make a Comment

Deixe uma resposta para pasquati Cancelar resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

8 Respostas to “Java, acessando banco de dados MS-Access em Windows 64bits”

RSS Feed for Pasqua Tecnologia Comments RSS Feed

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!


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: