Problema com alteração de dados no banco

Estou refazendo os exercícios que aprendi no curso da Caelum sozinho e encontrei um problema.

A Stack Trace me retorna o seguinte erro:

Exception in thread "main" java.lang.NullPointerException
    at br.com.caelum.jdbc.dao.UsuarioDao.alteraUsuario(UsuarioDao.java:87)
    at br.com.caelum.jdbc.teste.TestaAltera.main(TestaAltera.java:21)

Pesquisei aqui no fórum e achei coisas semelhantes, mas nenhum resolveu meu problema.

Eis que o código de alterar os dados usuário:

public class TestaAltera {
    public static void main(String[] args) {
        Usuario usuario = new Usuario();
        
        usuario.setNickname("Usuario001");
        usuario.setPass("12345679");
        usuario.setName("Usuario da Silva Santos");
        usuario.setMail("usuario@java.com");
        usuario.setAdress("Rua dos Usuarios, 42");
        usuario.setBirth(Calendar.getInstance());
        
        UsuarioDao dao = new UsuarioDao();        
        dao.alteraUsuario(usuario); //Linha 21 onde a Stack Trace manda o Erro
        
        System.out.println("Gravado!");
        
    }
}

E o método para alterar:

public void alteraUsuario(Usuario usuario){
        String sql = "update users set nickname=?, name=?, mail=?, " + 
                "adress=?, birth=? where id=?";
        try{
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, usuario.getNickname());
            stmt.setString(2, usuario.getPass());
            stmt.setString(3, usuario.getName());
            stmt.setString(4, usuario.getMail());
            stmt.setString(5, usuario.getAdress());            
            stmt.setDate(6, new Date(usuario.getBirth().getTimeInMillis()));
            stmt.setLong(7, usuario.getId()); //Linha 87 na qual a Stack Trace emite o Erro
            
            stmt.execute();
            stmt.close();
        }
        catch(SQLException e){
            throw new RuntimeException(e);
        }
    }

Vocês podem me ajudar? Desde já, muito obrigado.

1 curtida

Está dando nullpointer em qual linha?

Na sua SQL tem 6 campos, e no PrepareStatement tem 7, verifique o campo que esteja faltando para que não tenha esse erro, ou seja, o número de paramento não bate com os que estão estipulados na SQL

1 curtida

Execute sua aplicação em debug.

quando chegar na linha: stmt.setLong(7, usuario.getId());

selecione usuario.getId() com o mouse e aperte CTRL + SHIFT + i, veja se o retorno é null.

O que o dragon falou também confere, está faltando um set de pass na sua query.

2 curtidas

O problema estava no que o Dragoon disse… A SQL tava em falta do campo “pass”, além de estar faltando o usuario.setID(id) na classe de teste para identificar qual usuário deveria ser alterado. Bom, acho que foi isso… De qualquer forma, rodou!

Caras, obrigado a todos vocês!!!

1 curtida