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.