Odbc dbf

Boa tarde pessoal.

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:

ResultSet rs = null;
String driver = “sun.jdbc.odbc.JdbcOdbcDriver”;
Class.forName(driver);
String url = “jdbc:odbc:importacao”;
Connection conn = DriverManager.getConnection(url, “”, “”);

sql = “SELECT * FROM gbbol”;

PreparedStatement stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();

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).”

Não tenho a mínina idéia do que seja.

Se alguém puder me ajudar eu agradeço.

Luis Queiroz

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

Olá Léo.

Era isso mesmo Brother.

Obrigado

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”

O que será que posso fazer?

Obrigado se puderem ajudar

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:

Internal Error (os_windows_x86.cpp:149), pid=7856, tid=7708

guarantee(result == EXCEPTION_CONTINUE_EXECUTION) failed: Unexpected result from topLevelExceptionFilter

JRE version: 7.0_09-b05

Java VM: Java HotSpot™ 64-Bit Server VM (23.5-b02 mixed mode windows-amd64 compressed oops)

Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

An error report file with more information is saved as:

D:\Inovar\jboss-as-7.1.1.Final\jboss-as-7.1.1.Final\bin\hs_err_pid7856.log

If you would like to submit a bug report, please visit:

http://bugreport.sun.com/bugreport/crash.jsp

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.

Agradeço a ajuda e aguardo a resposta.

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).