Import TXT

4 respostas
S

Boa galera, aqu socorro por favor, estou tentando importar uma arquivo txt para uma tabela em um banco de dados MySql.

Segue o codigo:
package importararquivo;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

/**
*

  • @author valmir
    */
    public class Main {

    /** Creates a new instance of Main */
    
    public Main() {
    
    importa();
    
    }
    
    public void importa(){
    
    try {
    
    BufferedReader reader = new BufferedReader(new FileReader(c:/pabx2.txt));
    
    String Linha = reader.readLine();
    
    String dados;
    
    List lmb = new ArrayList();
    
    ImportarBean mb;
    
    for (int i = 0; ; i++){
    
    //Linha = reader.readLine();
    
    if (Linha == null) break;
    
    dados  =  Linha;
    
    mb = new ImportarBean();
    
    mb.setData(dados.substring(0,7));
    
    mb.setHora(dados.substring(8,11));
    
    mb.setT(dados.substring(12,12));
    
    mb.setRamal(dados.substring(13,17));
    
    mb.setTronco(dados.substring(18,23));
    
    mb.setNDiscado(dados.substring(24,37));
    
    mb.setRing(dados.substring(38,41));
    
    mb.setDuracao(dados.substring(42,47));
    
    mb.setCc(dados.substring(48,49));
    
    mb.setCc(dados.substring(80,81));
    
    //Adiciona 
             lmb.add(mb);
           
             
         }
    
    // Gravar no Banco
    
    Class.forName(com.mysql.jdbc.Driver);
    
    Connection con = DriverManager.getConnection(jdbc:mysql://localhost:3306/test,root,1272);
    
    String importar = INSERT INTO IMPORTARTXT VALUES (?,?,?,?,?,?,?,?,?,?);
    
    PreparedStatement ps = con.prepareStatement(importar);
    
    for (int i = 0; i < lmb.size(); i++ ){
         ps.setString(1, lmb.get(i).getData());
         ps.setString(2, lmb.get(i).getHora());
         ps.setString(3, lmb.get(i).getT());
         ps.setString(4, lmb.get(i).getRamal());
         ps.setString(5, lmb.get(i).getTronco());
         ps.setString(6, lmb.get(i).getNDiscado());
         ps.setString(7, lmb.get(i).getRing());
         ps.setString(8, lmb.get(i).getDuracao());
         ps.setString(9, lmb.get(i).getAcctCode());
         ps.setString(10, lmb.get(i).getCc());
         ps.executeUpdate();
                                  
           
         }
          
         con.close();
     } catch (NumberFormatException ex) {
         ex.printStackTrace();
     } catch (FileNotFoundException ex) {
         ex.printStackTrace();
     } catch (SQLException ex) {
         ex.printStackTrace();
     } catch (ClassNotFoundException ex) {
         ex.printStackTrace();
     } catch (IOException ex) {
         ex.printStackTrace();
     }
    

    }

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      new Main();
      }

}

Esta dando este erro:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
Java Result: 1

Por favor alguem poderia me dar uma colaboração …muito grato aos amigos.

Abraços.

4 Respostas

T

Dica: em vez de ler o arquivo inteirinho na memória e depois chamar o banco, faça o contrário - leia uma linha e imediatamente execute o comando do banco. É isso que está estourando a memória do Java.
A menos que você precise fazer alguma manipulação dos dados antes de inserir no banco, não é necessário criar um ArrayList com milhares ou dezenas de milhares de objetos antes de copiar os registros no banco.
Dica 2: Acho que o correto, no seu caso, não é chamar um programa java e sim ver se o MySQL tem um utilitário para importação de arquivos-texto. Isso deve ser bem mais rápido para processar.

dooda

só mais uma dica… :oops:

procure lembrar de usar as tags

quando código um pouco grande, ajuda…

Vallew’s 8)

S

boa foi mau... aqui não posso usar load data infile . por exemplo do mysql pois tenho um tratamento que preciso fazer tipo ..

segue arquivo txt:
02/01/06 10:17AM 1 E1085  T10112 33846906                 00:00'57              

02/01/06 10:17AM 1 E1078  T10121 27250508                 00:00'05              

02/01/06 10:17AM 1 E1157  T10105 0123136376456            00:00'28              

02/01/06 10:17AM 1 E1076  T10122 22688525                 00:00'50              

********************************************************************************

Date     Time    T Ext    CO     Dial Number         Ring Duration Acct code  CC

********************************************************************************

02/01/06 10:18AM 1 E1187  T10914 <I>3767             0'00 00:04'01            TR

02/01/06 10:18AM 1 E1155  T10110 25087568                 00:00'03              

02/01/06 10:18AM 1 E1160  T10115 25911394                 00:01'41              

02/01/06 10:18AM 1 E1049  T10113 0122422444700            00:05'35              

02/01/06 10:18AM 1 E1077  T10901 0312292315985            00:01'27              

02/01/06 10:18AM 1 E1029  T10105 38667971                 00:00'12              

02/01/06 10:18AM 1 E1042  T10123 0122732455382            00:01'03              

02/01/06 10:18AM 1 E1089  T10101 0121633823995            00:00'28              

02/01/06 10:18AM 1 E1125  T10915 <I>3788             0'00 00:01'43            TR

02/01/06 10:18AM 1 E1090  T10125 34093043                 00:00'05              

02/01/06 10:18AM 1 E1056  T10126 24873812                 00:00'22              

02/01/06 10:18AM 1 E1123  T10114 0123134953075            00:01'12              

02/01/06 10:18AM 1 E1098  T10104 27996536                 00:00'47              

02/01/06 10:18AM 1 E1137  T10119 22630920                 00:00'22              

02/01/06 10:18AM 1 E1096  T10120 22540226                 00:00'24              

02/01/06 10:18AM 1 E1086  T10904 97624163                 00:02'06              

02/01/06 10:18AM 1 E1191  T10924 <I>3790             0'00 00:03'53            TR

02/01/06 10:18AM 1 E1079  T10109 0122422226974            00:03'26              

02/01/06 12:42PM 1 E1165  T20901 22601155                 00:00'08              

02/01/06 12:42PM 1 E1166  T20902 22605302                 00:00'08              

02/01/06 12:42PM 1 E1157  T10111 33632206                 00:00'12              

02/01/06 12:42PM 1 E1130  T10901 82346944                 00:04'28              

02/01/06 12:42PM 1 E1159  T10119 38608895                 00:07'00              

02/01/06 12:42PM 1 E1015  T10114 25705614                 00:00'01              

02/01/06 12:42PM 1 E1125  T10109 27102189                 00:00'01              

02/01/06 12:42PM 1 E1150  T10111 27859533                 00:00'05

aonde tenho estes monte de asterisco para excluir e algunas campos que não são padrões....

O modelo da data entre outros...

S

fiz o teste com uma linha de arquivo e deu o mesmo erro:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
Java Result: 1

Me ajuda aí galera…

Abraços

Criado 14 de abril de 2008
Ultima resposta 15 de abr. de 2008
Respostas 4
Participantes 3