Estou com um problema com DBF que até hoje não consegui resolver.
Tenho alguns arquivos DBF que tenho que ler os registros e fazer uma importação. Segue meu código que “supostamente” ler as informações do arquivo dbf:
Acontece que no executeQuery acontece o seguinte erro: “java.sql.SQLException: [Microsoft][Driver ODBC para dBase] Erro inesperado causado pelo drivers de banco de dados externo (8715).”
Opa,
Tive o mesmo problema esses dias
descobri que o DBF que estava usando era um DBF gerado pelo Visual FoxPRO ai tive que instalar o driver ODBC do foxpro e so depois criar a conexao.
Tenta descobrir como esses dbf foram criados
Galera, tô com um problema parecido, acredito que seja por problemas de driver, tenho um programa que pega um arquivo texto, e transforma num dbf, utilizo delphi, mas dá um problema que diz “erro ODBC, Microsoft driver… Não é possível encontrar driver ISAM instalável”
Eae galera, estou com um problema ao ler arquivos DBF.
O erro é inconstante na hora que estou fazendo a consulta quando ele vai executar o resultSet, a JVM dispara um erro. As vezes faço a consulta com mais de 100 registros, de repente realizo a consulta que retorna apenas um registro e é exibido essa janela.
Se aperto o botão repetir no console é exibido essa mensagem:
A fatal error has been detected by the Java Runtime Environment:
The crash happened outside the Java Virtual Machine in native code.
See problematic frame for where to report the bug.
Se aperto o Ignorar ele dispara esse erro:
16:00:34,076 INFO [stdout] (http-localhost-127.0.0.1-8080-1) Oops-> java.sql.SQLException: [Microsoft][Driver ODBC dBASE] Recurso do sistema excedido.
Segue o codigo da consulta
public Acessorio importarAcessorioByCodigo(String codigo){
try {
Acessorio acessorio = new Acessorio();
//Registrar o Driver JDBC do banco de dados, neste caso estou usando o DBF
String conexao = "sun.jdbc.odbc.JdbcOdbcDriver";
//Carrega o Driver a ser utilizado
Class.forName(conexao).newInstance();
//Indica o caminho do arquivo
//String caminho = "C:\\Users\\Claeber\\Desktop\\Banco Engevidros"; //eX.: C:\J2SDK1.4.1\BIN\
// String de conexao para o DBF
String url = "jdbc:odbc:BD_ENG";
//Faz um SELECT no arquivo
String sql = "SELECT * FROM Aces where CODIGO = '"+codigo+"' ";
//OBS.: Não coloque a extensão do arquivo, deixe sem .DBF
//Abre uma conexão com o arquivo
Connection conn = DriverManager.getConnection(url);
// recuperar a classe Stamtemant a partir da conexao criada
Statement stmt = conn.createStatement();
//Retorna o resultado da Query
ResultSet rs = stmt.executeQuery(sql);
//Pegar o valor da(s) coluna(a) já no tipo desejado String, int, Date, etc...
while (rs.next()) {
acessorio.setCodigo(rs.getString("CODIGO"));
acessorio.setDescricao(rs.getString("DESCRICAO"));
acessorio.setPreco(rs.getDouble("PRECO"));
acessorio.setUndTexto(rs.getString("UNID"));
acessorio.setCorTexto(rs.getString("TRAT_COR"));
acessorio.setLinhaTexto(rs.getString("LINHA"));
if(acessorio.getCorTexto() == null || acessorio.getCorTexto().isEmpty())
acessorio.setCorTexto("SEM ACABAMENTO");
if(acessorio.getUndTexto() == null || acessorio.getUndTexto().isEmpty())
acessorio.setUndTexto("SEM UND");
if(acessorio.getLinhaTexto() == null || acessorio.getLinhaTexto().isEmpty())
acessorio.setLinhaTexto("SEM LINHA");
}
rs.close();
stmt.close();
conn.close();
return acessorio;
} catch (Exception e) {
System.out.println("Oops-> " + e);
return null;
}
}
Alguem poderia me ajudar, estou dependo dessa leitura para fechar contrato empresarial.
O driver ODBC (também conhecido por JDBC-ODBC Bridge) não é muito adequado para usar com aplicações multi-usuário (por exemplo, JBoss), por isso ocorrem esses erros inexplicáveis.
Eu recomendaria pegar esse DBF e convertê-lo para um banco de dados mais decente (não vale o Access!) , para evitar esses problemas.
Entendi, o problema é que esses arquivos são gerados por um outro software, e a minha aplicação precisa importar esses dados. JDBC não consegui porque todos os drivers são pagos, a única saída foi realizar uma conexão ODBC.
Mas você falou em converter os arquivos, como faria isso? Utilizo para aplicação o PostgresSQL, entretanto não sei como fazer isso.
Sua aplicação pega um DBF e converte para o PostgreSQL, certo? Só que ela está rodando sob o JBoss.
Se você separar a sua aplicação que faz a importação, e rodá-la em um programa Java “console”, ela explode desse mesmo jeito? Se ela não explodir, tente chamar essa aplicação depois usando um Runtime.exec (se bem que eu não sei se o JBoss bloqueia ou não o uso de Runtime.exec).