Problema para editar com banco de dados[RESOLVIDO]

6 respostas
V

Estou com um problema para editar o banco de dados com java.
Fiz de duas maneiras, porém nenhuma da certo

Desse jeito , lança uma exceção NullPointerException

public void alterarUsuario(Cliente cliente, Endereco end, int id) {
    Statement stmt = null;
    String sql = "";
    
    try{
        sql = "Update managementCommerce.clientes set nome='" + cliente.getNome();
                    sql += "',endereco='" + end.getRua() + "',telFixo='";
                    sql += cliente.getTelFixo() + "'where id = "+id;
   
       stmt.executeUpdate(sql);
       System.out.println("OK");
       this.resultset = stmt.executeQuery("select * from clientes");
       this.resultset.first();

    }catch(SQLException e){
        System.out.println("ERRO");
        }
    }

Desse jeito, ele diz que o contato foi editado com sucesso, porém, no banco de dados não altera.

public void EditarUsuario(Cliente cliente, Endereco end, int id){
        // apaga um usuario do banco de dados
        
        Statement stmt = null;

        // query que será executada
       //String sql = "UPDATE clientes set nome = 'ana' WHERE nome = 'Diego'";
     /*  String sql = "UPDATE managementCommerce.clientes set nome = '" + cliente.getNome() + "'," +
               " endereco = '" + end.getRua() + "',numero = '" + end.getNumero() + "'," +
               "complemento = '" + end.getComplemento() + "',bairro =  '" + end.getBairro() + "', " +
               "cep = '" + end.getCep() + "', referencia = '" + end.getReferencia() + "'," +
               " telFixo = '" + cliente.getTelFixo() + "', " +
               "telCelular =  '" + cliente.getTelCelular() +  
               " where nome = '" + nomeAntigo + "'";*/
      String sql = "Update managementCommerce.clientes set nome='" + cliente.getNome();
                    sql += "',endereco='" + end.getRua() + "',telFixo='";
                    sql += cliente.getTelFixo() + "'where id ='" + id + "'";

        try {
            stmt = this.conn.createStatement();
            stmt.executeUpdate(sql);

            


            System.out.println("usuário editado com sucesso!");

        } catch(SQLException e){
            System.out.println("erro ao editar usuario: " + e.getMessage());

        } finally {
            try {
                // fecha o stmt
                
                if(stmt != null) stmt.close();
            } catch (SQLException e){
                System.out.println("erro ao tentar fechar o stmt: " + e.getMessage());
            }
        }

    }

6 Respostas

jamirdeajr
O primeiro caso lança NullPointerException justamente porque o stmt não foi criado, Já o segundo parece estar correto, seria bom testar o retorno do executeUpdate:
try{
    stmt = this.conn.createStatement();   
    sql = "Update managementCommerce.clientes set nome='" + cliente.getNome();  
    sql += "',endereco='" + end.getRua() + "',telFixo='";  
    sql += cliente.getTelFixo() + "'where id = "+id;  
      
    // Retorna o número de linhas que o SQL DML  (Data Manipulation Language) gerou, se zero porque não fez nenhum update
    int ret = stmt.executeUpdate(sql);  
    if(ret > 0) 
         System.out.println("usuário editado com sucesso!");
    } else {
         System.out.println("Nenhum usuário atualizado, id:"+id);  
    }
}catch(SQLException e){  
    System.out.println("ERRO");  
}
rodrigoalmeida
vasco.fred:
Estou com um problema para editar o banco de dados com java. Fiz de duas maneiras, porém nenhuma da certo Desse jeito , lança uma exceção NullPointerException
public void alterarUsuario(Cliente cliente, Endereco end, int id) {
    Statement stmt = null;
    String sql = "";
    
    try{
        sql = "Update managementCommerce.clientes set nome='" + cliente.getNome();
                    sql += "',endereco='" + end.getRua() + "',telFixo='";
                    sql += cliente.getTelFixo() + "'where id = "+id;
   
       stmt.executeUpdate(sql);
       System.out.println("OK");
       this.resultset = stmt.executeQuery("select * from clientes");
       this.resultset.first();

    }catch(SQLException e){
        System.out.println("ERRO");
        }
    }
Desse jeito, ele diz que o contato foi editado com sucesso, porém, no banco de dados não altera.
public void EditarUsuario(Cliente cliente, Endereco end, int id){
        // apaga um usuario do banco de dados
        
        Statement stmt = null;

        // query que será executada
       //String sql = "UPDATE clientes set nome = 'ana' WHERE nome = 'Diego'";
     /*  String sql = "UPDATE managementCommerce.clientes set nome = '" + cliente.getNome() + "'," +
               " endereco = '" + end.getRua() + "',numero = '" + end.getNumero() + "'," +
               "complemento = '" + end.getComplemento() + "',bairro =  '" + end.getBairro() + "', " +
               "cep = '" + end.getCep() + "', referencia = '" + end.getReferencia() + "'," +
               " telFixo = '" + cliente.getTelFixo() + "', " +
               "telCelular =  '" + cliente.getTelCelular() +  
               " where nome = '" + nomeAntigo + "'";*/
      String sql = "Update managementCommerce.clientes set nome='" + cliente.getNome();
                    sql += "',endereco='" + end.getRua() + "',telFixo='";
                    sql += cliente.getTelFixo() + "'where id ='" + id + "'";

        try {
            stmt = this.conn.createStatement();
            stmt.executeUpdate(sql);

            


            System.out.println("usuário editado com sucesso!");

        } catch(SQLException e){
            System.out.println("erro ao editar usuario: " + e.getMessage());

        } finally {
            try {
                // fecha o stmt
                
                if(stmt != null) stmt.close();
            } catch (SQLException e){
                System.out.println("erro ao tentar fechar o stmt: " + e.getMessage());
            }
        }

    }
]

Mude de statement para prepareStatement, isso não vai resolver problema, mas vai ótimizar a execução do SQL e evitar um SQL injection.
Verifique se o id q vc está passando é o correto, pq aparentemente o segundo trecho de código está correto, como jamirdeajr disse.

luxu

outra dica: sempre teste o SQL antes de rodar para ir vendo onde está errado, ok?

V

O id que eu estou passando é o correto sim.
Só que não estou conseguindo.
Fiz dessa segunda maneira, ele apareceu que editou, mas no sql continua do mesmo jeito

public void alterarUsuario(Cliente cliente, Endereco end, int id) {
    Statement stmt = null;
    String sql = "";
    
    try{
        stmt = this.conn.createStatement();   
        sql = "Update managementCommerce.clientes set nome='" + cliente.getNome();
                    sql += "',endereco='" + end.getRua() + "',telFixo='";
                    sql += cliente.getTelFixo() + "'where id = "+id;
   
     int ret = stmt.executeUpdate(sql);
     if(ret > 0){
          System.out.println("usuário editado com sucesso!");
     } else {
          System.out.println("Nenhum usuário atualizado, id:"+id);
     }
       this.resultset = stmt.executeQuery("select * from clientes");
       this.resultset.first();

    }catch(SQLException e){
        System.out.println("ERRO");
        }
    }
jamirdeajr

Bom, neste caso sugiro que você imprima o que está na variável sql e verifique se os campos que estão sendo atualizados estão com os valores corretos.

Outra coisa, não custa perguntar… sua conexão não está com conn.setAutocommit(false); não é, se estiver será necessário um conn.commit(); para efetivar o comando!

V

Deu certo aqui.
Mt obg pela ajuda;

Criado 9 de abril de 2011
Ultima resposta 9 de abr. de 2011
Respostas 6
Participantes 4