Statement SQL

4 respostas
C

Seguinte pessoal, estou importando um arquivo txt pegando nele o que interessa e via conexao mysql inserindo no banco de dados a parte desejavel.

Estou problema com o laco...

qdo eu leio apenas uma linha do arquivo pego o que interessa e jogo via comando sql no banco de dados da tudo ok, ele conecta chama o Statement e executa o Update.

Mas e como eu faco pra ele executar o executeUpdate, a cada iteracao do for? nao vou precisa conectar no banco de dados todas as vezes neh ?

mas quando eu faco a conexao fora do for e quando eu dou o stmt.executeUpdate(String sql), ele nao reconhece a linha...

public class Main {
    
    
    public static void main(String[] args) {
        
       String vetor [] = new String [500];
       String linha ;
       String grava = "";
       
     try {
           
           Connection conn = Conexao.getConnect();
           
           Statement stmt = null;
           stmt = conn.createStatement();
            
       }
       
       catch (SQLException e){
           
       
           e.printStackTrace();
           System.out.println("Erro com o sql");
           
       }
             
    
      try {

        
        FileReader reader = new FileReader(new File("conta.txt"));
        BufferedReader leitor = new BufferedReader(reader);
        Conexao c = new Conexao();
              
            linha = leitor.readLine();
        
          for (int i =0; linha != null ; i++) {
             
                                       
             vetor = linha.split(".\s");   
             String x = vetor[vetor.length-1].replace(",",".");
             grava += c.salvar (vetor[2] , x);
             linha = leitor.readLine();
             stmt.executeUpdate(grava); // AQUI DA PAU !!!
           
           }
            
        }
        
               
      
       
                  
        catch (IOException e) { 
            
          System.out.println("Erro na leitura do arquivo."); 
        } 
       
    
    }
    
}

Outra Classe:

public class Conexao {


        private static String NOME_BANCO= "telefones";
 	private static String NAME = "com.mysql.jdbc.Driver"; 
 	private static String URL= "jdbc:mysql://localhost/"+NOME_BANCO;
 	private static String LOGIN= "root";
 	private static String PASS= "";
       
 	
 	
 	public static Connection getConnect() throws SQLException  {
 		
 		Connection conn = null;
 		
 		try {
 			Class.forName(NAME);
 			conn= DriverManager.getConnection(URL, LOGIN, PASS);
                        System.out.println("Conectado" );
                        return conn;
                        
 		} catch (ClassNotFoundException e) {
 			System.out.print("\n Driver Não encontrado\n");
 			e.printStackTrace();
 			return null;
                }
                
                catch (SQLException e) {
                    System.out.print("Erro ao obter a conexao");
                    return null;
                }
        }  
        
      
        
  
  
  public String salvar (String tels, String valores) {
      
            
      String sql = "";
      sql = "INSERT INTO contatelefone (tels,valores) ";
      sql += " VALUES ( " + tels + " , ";
      sql += valores + " ) ";
      return sql;

Compiling 1 source file to C:\Documents and Settings\user\JavaApplication21\build\classes
C:\Documents and Settings\user\JavaApplication21\src\javaapplication21\Main.java:65: cannot find symbol
symbol : variable stmt
location: class javaapplication21.Main
stmt.executeUpdate(grava);
1 error
BUILD FAILED (total time: 0 seconds)

4 Respostas

Roger75

Tente declarar a linha:

Statement stmt = null;

fora do try catch. Acho que não está reconhecendo a variável stmt.

peerless

Nunca declare variaveis que serão usadas em todo código, dentre try/catch …

declare-a então, como private ou logo abaixo da assinatura do método

Y

Cara, tu podes usar o método addBatch do Statement para ir adicionando comandos ao teu Statement.

Você substitui a linha:

stmt.executeUpdate(grava);

Por:

stmt.addBatch(grava);

Então, depois de adicionar todos os comandos que tu querias, podes chamar o método que executa todos os comandos de uma vez:

stmt.executeBatch();

Mais sobre o método executeBatch: http://java.sun.com/javase/6/docs/api/java/sql/Statement.html#executeBatch()

C

Bom as dicas nao resolveram…

nem colocar o null fora do laco e nem usar addbach

agora essa dica eu nao consegui entender q eh pra fazer

Nunca declare variaveis que serão usadas em todo código, dentre try/catch …

declare-a então, como private ou logo abaixo da assinatura do método

poderia me falar, como assim private, como seria, tentei algo parecido nao me entendi direito

abraco

Criado 23 de abril de 2007
Ultima resposta 23 de abr. de 2007
Respostas 4
Participantes 4