Conexão Java com Access

1 resposta
xandelol

Olá pessoal, estou desenvolvendo um projeto que une Java com Access.
Eu pego um arquivo do Access e preciso ler os seus dados, mas acontece o seguinte erro…

java.sql.SQLException: [Microsoft][ODBC Driver Manager] O DSN especificado cont?m uma incompatibilidade de arquiteturas entre o Driver e o Aplicativo
	at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956)
	at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113)
	at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3072)
	at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
	at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
	at java.sql.DriverManager.getConnection(DriverManager.java:579)
	at java.sql.DriverManager.getConnection(DriverManager.java:221)
	at teste.acesso.access.TesteAcessoAccess.getConnection(TesteAcessoAccess.java:28)
	at teste.acesso.access.TesteAcessoAccess.main(TesteAcessoAccess.java:56)

O erro acontece devido a diferença de arquiteturas, e procurando pelo erro no Google, eu achei uma solução que dizia que ao instalar o JRE de 32bits, e rodando o netbeans no modo 32bits, o erro seria solucionado.
Eu instalei o JRE 32bits, rodo o netbeans no modo 32bits também, e o erro persiste.
Alguém teria uma outra solução?

Segue o código que estou usando:

package teste.acesso.access;

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
 *
 */
public class TesteAcessoAccess {
    private static final String username = "";
    private static final String password = "";
    private static final String DSN = "Base VIVO"; // 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 = TesteAcessoAccess.getConnection();
 
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM BOLETO"); // temos uma tabela usuario com o campo nome
            while(rs.next()) {
                String nome = rs.getString("TEXTO");
                System.out.println("Nome: " + nome);
            }
             
            // fechando a conexão
            TesteAcessoAccess.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Estou usando o Access 2007.

Desde já, obrigado.

1 Resposta

Luiz_Augusto_Prado

vc está mandando o que na sua variavel DNS?
“Base VIVO”?

vc deveria colocar o endereço de onde está a base de dados.
seu bd access está configurado pra funcionar como serviço?

Criado 2 de outubro de 2013
Ultima resposta 3 de out. de 2013
Respostas 1
Participantes 2