JavaDBF API

4 respostas
N

Boa noite!

Quero realizar uma consulta e criar um arquivo .dbf para salva a mesma, pois bem, isso já está pronto! mais o problema é o seguinte, pelo que entendi a variavel Object[] que são as minhas linhas tem que ter o mesmo valor(int) da variavel DBFField senão dá erro

Exception in thread “main” com.linuxense.javadbf.DBFException: Invalid record. Invalid number of fields in row
at com.linuxense.javadbf.DBFWriter.addRecord(DBFWriter.java:142)

, ou seja, se eu criar 100 colunas só poderei inserir 100 linhas?

Preciso de ajuda, obrigado desde já.

4 Respostas

V

Por favor, ao postar tópicos, não marque-os com o óbvio como as palavras [Dúvida] ou [Ajuda]. Leia nosso guia de postagem:
http://www.guj.com.br/java/287484-gujnautas-how-to

O erro que está dando é porque sua variável Object[] refere aos dados das colunas, não das linhas. E você precisa inserir um dado para cada coluna da tabela.

Tópico movido para o fórum de persistência.

N

ViniGodoy, desculpe pelo post.

Mais o que você me disse a nível de código como seria? eu estou inciando e tenho ainda um pouco de dificuldade, vou posta meu código abaixo pra você me explicar o como puder ok? se tiver alguma sugestão para melhora-lo será bem vindo.

package gui;
import com.linuxense.javadbf.*;

import <a href="http://java.io">java.io</a>.*;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import repositorio.ConectaBancoMulti;

public class dbf{

public static void main( String args[])

throws DBFException, IOException, SQLException {

String tabelas[] = {"SD2020","SF2020","SZT020","SB1020","SA3020","SA1020"};
String filiais[] = {"('18','24','34')","'35'"};
PreparedStatement pstatement;
ResultSet resultado;
int i = 0;
pstatement = ConectaBancoMulti.AbriConexao().prepareStatement(“select * from siga.”+tabelas[0]+" where “+tabelas[0].substring(1,3)+”_FILIAL in “+ filiais[0]

+” and “+tabelas[0].substring(1,3)+”_EMISSAO between ‘20120102’ and ‘20120102’"

+" order by “+tabelas[0].substring(1,3)+”_EMISSAO"

);	

pstatement.executeQuery();

resultado = pstatement.executeQuery();
DBFField fields[] = new DBFField[resultado.getMetaData().getColumnCount()-3];

// Criando colunas
for (int t = 1; t <= resultado.getMetaData().getColumnCount();t++) {

fields[i] = new DBFField();

if (t == 134){ // Ao chegar na coluna 134 avançe mais 3.

t=t+3;

fields[i].setName(resultado.getMetaData().getColumnName(t));

}else{

fields[i].setName(resultado.getMetaData().getColumnName(t));

}

fields[i].setDataType(DBFField.FIELD_TYPE_C);
fields[i].setFieldLength(20);

i++;

}

DBFWriter writer = new DBFWriter();

writer.setFields(fields);
// Criou as colunas

i=0;
Object rowData[] = new Object[fields.length];

while (resultado.next()){

rowData[i] = resultado.getString(i+1);

writer.addRecord(rowData); // Aqui da problema.

i++;

}

FileOutputStream fos = new FileOutputStream(“C:\Bases\Alianca\Teste.dbf”);

writer.write(fos);

fos.close();

}
}

V

Edite seu post e use a tag code, como indicado no link que passei no primeiro post.

N
package gui; 
import com.linuxense.javadbf.*; 

import java.io.*; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import repositorio.ConectaBancoMulti; 



public class dbf{ 


public static void main( String args[]) 

throws DBFException, IOException, SQLException { 

String tabelas[] = {"SD2020","SF2020","SZT020","SB1020","SA3020","SA1020"}; 
String filiais[] = {"('18','24','34')","'35'"}; 
PreparedStatement pstatement; 
ResultSet resultado; 
int i = 0; 



pstatement = ConectaBancoMulti.AbriConexao().prepareStatement("select * from siga."+tabelas[0]+" where "+tabelas[0].substring(1,3)+"_FILIAL in "+ filiais[0] 
+" and "+tabelas[0].substring(1,3)+"_EMISSAO between '20120102' and '20120102'" 
+" order by "+tabelas[0].substring(1,3)+"_EMISSAO" 
);	
pstatement.executeQuery(); 
resultado = pstatement.executeQuery();	

DBFField fields[] = new DBFField[resultado.getMetaData().getColumnCount()-3]; 

// Criando colunas 
for (int t = 1; t <= resultado.getMetaData().getColumnCount();t++) { 

fields[i] = new DBFField(); 

if (t == 134){ // Ao chegar na coluna 134 avançe mais 3. 
t=t+3; 
fields[i].setName(resultado.getMetaData().getColumnName(t)); 
}else{ 
fields[i].setName(resultado.getMetaData().getColumnName(t)); 
} 
fields[i].setDataType(DBFField.FIELD_TYPE_C); 

fields[i].setFieldLength(20); 
i++; 
} 
DBFWriter writer = new DBFWriter(); 

writer.setFields(fields); 
// Criou as colunas 

i=0; 
Object rowData[] = new Object[fields.length]; 

while (resultado.next()){ 

rowData[i] = resultado.getString(i+1); 
writer.addRecord(rowData); // Aqui da problema. 
i++; 

} 



FileOutputStream fos = new FileOutputStream("C:\\Bases\\Alianca\\Teste.dbf"); 

writer.write(fos); 

fos.close(); 

} 
}
Criado 19 de janeiro de 2013
Ultima resposta 19 de jan. de 2013
Respostas 4
Participantes 2