Odbc dbf

7 respostas
L

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

7 Respostas

L

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

L

Olá Léo.

Era isso mesmo Brother.

Obrigado

M

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

C

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.

E

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.

C

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.

E

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

Criado 1 de dezembro de 2009
Ultima resposta 28 de nov. de 2012
Respostas 7
Participantes 5