Inserir dados txt no banco mysql

4 respostas
B

Bom dia pessoal do GUJ, apos diversas pesquisas no site nao encontrei a soluçao do meu problema, tenho q criar um codigo que leia um txt (no meu caso rtf ja que uso MAC) e nao estou conseguindo, esta dando “Erro: Null” eu sei onde esta acontecendo o erro (depois de reconhecer o arquivo e antes de tentar qualquer coisa no banco) porem nao sei o que fazer para fazer funcionar.
Aqui esta o txt “20081210;08525452;Macapa;42585412;F02F65FF55” campos separados por ;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.StringTokenizer;
import java.io.*; 


public class Scaner {  
    public static void main(String args[]) {  
  
        try {  
  
            Class.forName("com.mysql.jdbc.Driver");  
            Connection con = DriverManager.getConnection(  
                    "jdbc:mysql://localhost:3306/GCON", "root", "123456");  
            Statement stm = con.createStatement();  
  
            BufferedReader reader = new BufferedReader(new FileReader("database.rtf"));  
            String dados[] = new String[5];  
            String linha = reader.readLine();  
  
            while (linha != null) {  
  
                StringTokenizer st = new StringTokenizer(linha,";");  
         
                dados[0] = st.nextToken();  
                dados[1] = st.nextToken();  
                dados[2] = st.nextToken();  
                dados[3] = st.nextToken();  
                dados[4] = st.nextToken();  
                
                
                
                stm.executeUpdate("insert into TBGCON (timestamp,praca,cidade,numdomicilio,stringconfig) values ('"'"+ dados[0] + "','"  + dados[1] + "','" + dados[2] + "','"  +  dados[3] + "','"  +  dados[4] + "','"  +"')");  
  
                linha = reader.readLine();  
            }  
            System.out.println("INSERT EXECUTADO COM SUCESSO");  
        } catch (Exception e) {  
  
            System.err.println("Erro: " + e.getMessage());  
        }  
    }  
}

quem souber de uma solucao, um link, ou qualquer outra dica fica muito agradecido!

4 Respostas

gilmatryx

Facilita se vc mudar esse trecho

} catch (Exception e) {    
     
System.err.println("Erro: " + e.getMessage());    
}

Para:

} catch (Exception e) {    
     
e.printStackTrace();  
}

Assim vc vai saber qual o tipo de erro (JDBC,IO,etc…) e em qual linha.
Faz isso, executa o código e depois diz qual é o erro.

Blz?

B

ta dando esse erro aki

java.util.NoSuchElementException
	at java.util.StringTokenizer.nextToken(StringTokenizer.java:332)
	at Scaner.main(Scaner.java:28)
gilmatryx

Olha, se para o exemplo de String que vc postou:

String dados[] = new String[5];

		String linha = "20081210;08525452;Macapa;42585412;F02F65FF55";

		StringTokenizer st = new StringTokenizer(linha, ";");

		dados[0] = st.nextToken();
		dados[1] = st.nextToken();
		dados[2] = st.nextToken();
		dados[3] = st.nextToken();
		dados[4] = st.nextToken();
		
		for(int i = 0 ; i<dados.length; i++)
			System.out.println(dados[i]);

Isso funciona só com a Strings ( “20081210;08525452;Macapa;42585412;F02F65FF55”) desse tipo…

O problema está na linha do arquivo lida no momento da leitura do arquivo.

Por exemplo, se vc tiver uma string sem o segundo campo (“20081210;;Macapa;42585412;F02F65FF55”) vc vai receber a exceção:

Exception in thread "main" java.util.NoSuchElementException
	at java.util.StringTokenizer.nextToken(Unknown Source)

Então vc vai ter que tratar a leitura como:

para cada posição do array faça:

if(st.hasMoreTokens())
		dados[4] = st.nextToken();

Aí deve funcionar, então essa posição no array vai ficar nula, aí dependendo do esquema do banco de dados, a coluna correspondente pode aceitar ou não.

Dica Java para leitura do arquivo, tente utilizar a classe java.util.Scanner se vc estiver usando java 5 ou 6

vlw>

B

vlw msm pela ajuda,

ja to no caminho certo
consegui fz ele inseri dados (por enquanto null)

vlw!!

Criado 14 de novembro de 2008
Ultima resposta 14 de nov. de 2008
Respostas 4
Participantes 2