Erro java.lang.NullPointerException

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

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

}[/code]
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.

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

Esta é a linha:

ps = con.prepareStatement(SQL);

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.

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?

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

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.