Erro java.lang.NullPointerException

5 respostas
K
Caro Colegas, Estou com esta mensagem de erro "java.lang.NullPointerException", em duas classes, e não estou conseguindo resolver este erro. Abaixo segue o minha classe AlunoDAO:
public Aluno buscaporId(Integer id) throws Exception
    {
        SQL = "SELECT * FROM tb_aluno WHERE idAluno=?";
        
        ps = con.prepareStatement(SQL);
        
        ps.setInt(2, id);
        
        rs = ps.executeQuery();
        
        Aluno a = new Aluno();
        
        if(rs.next())
        {
            a.setIdAluno(rs.getInt("idAluno"));
            a.setNome(rs.getString("nome"));
            a.setCpf(rs.getString("cpf"));
            a.setRg(rs.getString("rg"));
            a.setSexo(rs.getString("sexo"));
            a.setDtnasc(rs.getDate("dtnas"));
            a.setPai(rs.getString("pai"));
            a.setMae(rs.getString("mae"));
            a.setTelefone(rs.getLong("telefone"));
            a.setEmail(rs.getString("email"));
            a.setEndereco(rs.getString("endereco"));
            a.setBairro(rs.getString("bairro"));
            a.setCidade(rs.getString("cidade"));
            a.setUf(rs.getString("uf"));
            a.setCep(rs.getString("cep"));
            a.setDtCad(rs.getDate("dtCad"));
        }
        CloseDatabase();
        return a;
    }
E abaixo a classe TesteBuscaPorId
package test;

import dao.AlunoDAO;
import model.Aluno;

public class TesteBuscaPorId 
{
    public static void main(String [] args) throws Exception
    {
        AlunoDAO dao  = new AlunoDAO();

        Aluno aluno = dao.buscaporId(2);
        
        System.out.println("Matricula: " + aluno.getIdAluno());
        System.out.println("Nome: " + aluno.getNome());
        System.out.println("CPF: " + aluno.getCpf());
        System.out.println("RG: " + aluno.getRg());
        System.out.println("Sexo: " + aluno.getSexo());
        System.out.println("Data Nascimento: " + aluno.getDtnasc());
        System.out.println("Pai: " + aluno.getPai());
        System.out.println("Mãe: " + aluno.getMae());
        System.out.println("Telefone: " + aluno.getTelefone());
        System.out.println("Email: " + aluno.getEmail());
        System.out.println("Endereço: " + aluno.getEndereco());
        System.out.println("Cidade: " + aluno.getCidade());
        System.out.println("UF: " + aluno.getUf());
        System.out.println("CEP: " + aluno.getCep());
        System.out.println("Data Cadastro: " + aluno.getDtCad());
    } 
}
E aqui a mensagem de erro completa:
Exception in thread "main" java.lang.NullPointerException
	at dao.AlunoDAO.buscaporId(AlunoDAO.java:44)
	at test.TesteBuscaPorId.main(TesteBuscaPorId.java:12)
Java Result: 1
Espero que possam me ajudar.

5 Respostas

B

Qual é a linha número 44 do arquivo AlunoDAO.java?

K

Esta é a linha:

ps = con.prepareStatement(SQL);
B

NullPointerExceptions acontecem quando:

MeuObjeto objeto = null; // objeto está nulo

objeto.chamarUmMetodo(); // Chamar um método de um objeto nulo causa NullPointerExceptions

A tua variável con está nula. Pegue uma conexão do banco e coloque nela.

Outra, não declare PreparedStatements e ResultSets como atributos da classe. Declare e use-os somente dentro do método em que foram criados.

K
Me desculpe, mas não entendi o que quis dizer que minha variável con está nula. Por um acaso seria pegando da classe de conexao?
public class ConnectionMySql 
{
    public Connection con;
    public PreparedStatement ps;
    public ResultSet rs;
    public String SQL;

    public void OpenDatabase()throws Exception
    {
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/gestao"; 
        String user = "root";  
        String password = ""; 
        con = DriverManager.getConnection(url, user, password);
    }

    public void CloseDatabase() throws Exception
    {
        if(con != null)
        {
            con.close();
        }
    }
B

Se a única maneira de instanciar um objeto de conexão no teu sistema é chamar esse método OpenDatabase, se con está nulo, então isso quer dizer que você não está chamando OpenDatabase antes de fazer uma consulta à base de dados.

Primeira tenha certeza que OpenDatabase esteja funcionando.

Criado 24 de maio de 2013
Ultima resposta 25 de mai. de 2013
Respostas 5
Participantes 2