StringTokenizer em TXT

Olá a todos!

Tenho o seguinte código que possui a função de ler linha a linha de um arquivo TXT, e jogar os dados em uma tabela no BD. Eis o código:


try{
                    	
                    	
Class.forName("org.firebirdsql.jdbc.FBDriver");
Connection con = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:\DARWINBANCODADOS.GDB","SYSDBA","masterkey");
Statement stm = con.createStatement();
                  	
arquivo = arq.getSelectedFile();
BufferedReader reader = new BufferedReader(new FileReader(arquivo));
String dados[] = new String[3];      
String linha = reader.readLine();
      
    while (linha != null) {
         
        StringTokenizer st = new StringTokenizer(linha,";");
            
              dados[0] = st.nextToken();
              dados[1] = st.nextToken();
              dados[2] = st.nextToken();
                           
              stm.executeUpdate("INSERT INTO GENOTIPAGEMMATERIAL (NUMINTERNO,M01ETH10A,M01ETH10B,DATAGENOTIPAGEM) VALUES ('"+dados[0]+"','"+dados[1]+"','"+dados[2]+"','"+DataField.getText()+"')");
                           
                           
               linha = reader.readLine();      
    }
}

O problema é que ele somente grava a primeira linha do TXT. Quando ele vai ler as outras ele emite uma exception dizendo que a PK foi violada. Existe algum problema com esse código?.Alguém pode me ajudar?

Até mais

Patty

Acredito que vc esteja lendo e como consequencia inserido a mesma linha.

to meio que sem tempo agora, deve ter um jeito de vc pegar a proxima linha.

:slight_smile:

vc ta lendo a primeira linha do arquivo sempre.
e inserindo sempre os mesmos valores.

seu programa ta com erro de logica. para ler o arquivo linha a linha use:

String linha = null;
while(linha = reader.readLine() != null) {
  //processa ovalor da linha corrente
}

entendeu?

[]'s

Olá…

Entendi…arrumei o código, e deu certo…só que ele lê uma linha sim, outra não…uma linha sim…outra não…pq será?

Até mais

Patty

Olá…resolvi o problema…apenas retirei a linha abaixo, que se encontrava ao final do ‘while’:

 linha = reader.readLine();

Obrigada pela ajuda!!!

Até mais

Patty :smiley:

Patty,

StringTokenizer é uma classe legada e não deve ser utilizada a menos que para compatibildiade. Utilize String.split()

http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html

[quote=pcalcado]Patty,

StringTokenizer é uma classe legada e não deve ser utilizada a menos que para compatibildiade. Utilize String.split()

http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html[/quote]

Concordo!!acho melhor você usar o metodo split da classe String!:smiley: