Comando LOAD DATA INFILE para ACCESS, alguém conhece algo parecido ? ((RESOLVIDO))

12 respostas
easrml

Boa tarde Pessoal,

To com o seguinte problema…

Tenho uma aplicação que gera um arquivo csv com 40.000 linhas eu queria importar esse arquivo para um banco de dados ACCESS (não posso utilizar outro), porem utlizando algum comando em JAVA procurei por LOAD DATA INFILE (Mysql) mais sem sucesso, alguém poderia me ajudar ?

Agradeço a força!

Vlw!!!

12 Respostas

E

sugiro que tente usar o kettle ( http://kettle.pentaho.com/ )

Mas se me lembro bem, o access importa um csv para tabela.

Caso nada te agrade, pode pegar a classe de java para ler csv, e usa JDBC ou ODBC para inserir os dados.

easrml

Eu uso JDBC hj porem como o arquivo é muito grande é muito demorado o “import”… via access consigo tbm porem como a aplicação é toda automatica ficaria um pouco fora do foco… Vou analisar esse kettle para ver se adapta ao que preciso, desde já agradeço a atenção pontual.

E

mas pelo JDBC você está usando quais recursos? Minha sugestão seria fazer um PreparedStatement, e nele, um addBatch. Provavelmente você já testou isso e não deve ter sido tão rápido quanto queria. Hoje mesmo (usando o kettle) inseri 488327 linhas em 83 segundos em um banco oracle.

easrml

Caraca… rsrsrs tão rapido assim!!! hehe… Verifiquei a documentação e vi que ele é uma IDE que vc arrasta os parametros e faz os imports certo? Ele não gera codigo para seja implementado no projeto ?.. Fiquei impressionado com a rapidez de tua inserção hehehe…

Abraço

E

easrml:
Caraca… rsrsrs tão rapido assim!!! hehe… Verifiquei a documentação e vi que ele é uma IDE que vc arrasta os parametros e faz os imports certo? Ele não gera codigo para seja implementado no projeto ?.. Fiquei impressionado com a rapidez de tua inserção hehehe…

Abraço

é isso mesmo, ele é isso mesmo, e eu costumo integrar ele nos projetos através de chamada ao sistema, ele tem um bat e um sh file chamado kitchen, que são manipulados da mesma maneira, recebem parâmetros e o nome do arquivo que você guardou as configurações do seu JOB. Talvez tenha alguma opção mais elegante, visto que ele é em java, talvez possa importar ele como projeto e chamar de forma mais elegante.

Mas vc tentou fazer os addBatch no prepareStatement?

easrml

Então não uso addBatch na verdade nunca usei esse metodo… Vou analisar pra ver…

Flww

easrml
evefuji:
easrml:
Caraca... rsrsrs tão rapido assim?!?! hehe... Verifiquei a documentação e vi que ele é uma IDE que vc arrasta os parametros e faz os imports certo? Ele não gera codigo para seja implementado no projeto ?... Fiquei impressionado com a rapidez de tua inserção hehehe...

Abraço

é isso mesmo, ele é isso mesmo, e eu costumo integrar ele nos projetos através de chamada ao sistema, ele tem um bat e um sh file chamado kitchen, que são manipulados da mesma maneira, recebem parâmetros e o nome do arquivo que você guardou as configurações do seu JOB. Talvez tenha alguma opção mais elegante, visto que ele é em java, talvez possa importar ele como projeto e chamar de forma mais elegante.

Mas vc tentou fazer os addBatch no prepareStatement?

Tentei agora fazer via addBatch porem não adiantou muito ficou na mesma velocidade... vou te passar o código....

pstmInserir.setString(28, s[27]);
pstmInserir.addBatch();
System.out.println(linha+ " - "+s[0]);
// ...

//Depois executo o pstm

pstmInserir.executeBatch();

Acredito que por ser um arquivo grande com várias posicões na List ele fique lento... Mais acredito que tenha como melhorar muito a logica...

E

tentou algo assim:

int cont=0;
int mod=0;
while(iterator.hasNext(){
   while(iterator.hasNext() && cont++<=1000){
     pstmInserir.addBatch(); 
     seuObjeto = iterator.next(); 
     pstmInserir.setString(1, seuObjeto.getV1());  
     pstmInserir.setString(2, seuObjeto.getV2());  
   }
  pstmInserir.executeBatch();  
  System.out..println("inserido "+(mod++*1000));
}

Acho que assim deve ter um bom desempenho (ps, se não imprimir saída em todas as iterações, você vai ter um desempenho melhor)

E

conseguiu?

easrml

Então… Consegui usando o addBatch agora está demorando menos mais acho q nao vai baixar o tempo… Tava com erro de logica tbm pq pensa… o meu arquivo tem 43 mil linhas mais nessas linhas tem 27 posições de array, ou seja 43000 x 27 = 1 milhão e poucas gravações… Se levar em conta que faz em 8 minutos… Ta bom neh…

Cara agradeço pela força… foi de grande valia… muito obrigado!

F

Uma outra coisa que dá para fazer é separar em várias Threads. A inclusão que der erro salvar em um arquivo de log separado a string que representa a linha que deu erro.

Abraço,

Fred

easrml

fre_d:

Uma outra coisa que dá para fazer é separar em várias Threads. A inclusão que der erro salvar em um arquivo de log separado a string que representa a linha que deu erro.

Abraço,

Fred


Isso ja ocorre dentro do try/catch, quando tem algum erro na linha ele grava na log… Vlw

Criado 9 de novembro de 2010
Ultima resposta 15 de nov. de 2010
Respostas 12
Participantes 3