Problema para editar com banco de dados[RESOLVIDO]

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());
            }
        }

    }

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:

[code]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”);
}
[/code]

[quote=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.

[code]

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());
        }
    }

}

[/code][/quote]
]

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.

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

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");
        }
    }




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!

Deu certo aqui.
Mt obg pela ajuda;