Q:

Problema com uma estrutura de um metodo

Bom eu fiz um metodo para alterar senha
onde ele faz um select no banco de dados  para ver se o login e a senha digitada são iguais no banco de dados 
String sql = "SELECT id_usuario,nome,senha FROM usuario where login = ?  and senha = ?"; 
    try {
        PreparedStatement stmt = con.prepareStatement(sql);
        stmt.setString(1, u.getLogin());
        stmt.setString(2, u.getSenha());
        ResultSet rs = stmt.executeQuery();

e depois eu fiz essa verificação com um if:
  if (rs.next()){
            String update = "UPDATE usuario SET senha=?  WHERE id_usuario = " +Sessao.getInstancia().getUsuario().getId()+ "";
            PreparedStatement stmt2 = con.prepareStatement(sql);
            stmt2.setString(1, u.getNovaSenha());
            ResultSet rs2 = stmt2.executeQuery();

            return true;
        }

para fazer o update da senha se o id for igual o id do usuario conectado
eu debuguei e verifiquei que o está pegando o id do usuario normalmente, mas está dando esse error:
GRAVE: null
java.sql. SQLException: No value specified for parameter 2

eu sei que tem relação com a estrutura, mas eu não faço ideia onde eu errei 
e como e onde eu fecharia a conexão com o bd dps disso? 

A:

Cara, o ideal é você ter métodos para cada coisa que você quer fazer separadamente e não tudo em um só..
por exemplo, podes ter um método de verificar usuário (retornaria boolean), e outro para alterar senha (que receberia como parametro um id)
pronto! 
public boolean verificarUsuario(Usuario u) {
        String sql = "SELECT * FROM usuario WHERE nome = ?"; 
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            stmt = con.prepareStatement(sql);
            stmt.setString(1, u.getNome());
            rs = stmt.executeQuery();
            rs.first();
            return rs.getString("senha").equals(u.getSenha());
        } catch (SQLException ex) {
            System.err.println("ERRO: " + ex);
        } finally {
            ConnectionFactoryMySQL.closeConnection(con, stmt, rs);
        }
    }

e depois ter o método de alterar senha:
public boolean updateUsuario(Usuario u) {
        String sql = "UPDATE usuario SET senha = ?  WHERE nome = ?"; 
        PreparedStatement stmt= null;
        try {
            stmt= con.prepareStatement(sql);
            stmt.setString(1, u.getSenha());
            stmt.setString(2, u.getNome());
            stmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            System.err.println("ERRO: " + ex);
            return false;
        }finally{
            ConnectionFactoryMySQL.closeConnection(con, stmt);
        }
    }

