NullPointerException, mas aonde?!?

Boa tarde,

Estou fazendo um exercício e estou recebendo exception de NullPointer, sei o que significa essa exception,
porem procurei, pensei, procurei, pensei mais um pouco e não consegui descobrir o problema.
Tenho uma classe DAO com o seguinte método:

    public Livro getLivro(int idp) {
        Livro liv = new Livro();
        ResultSet rs;
        try {
            stmtGetLivro = con.prepareStatement("SELECT * FROM livros WHERE id = ?");
            stmtGetLivro.clearParameters();
            stmtGetLivro.setInt(1, idp);
            rs = stmtGetLivro.executeQuery();
            liv.setId(rs.getInt("id"));
            liv.setTitulo(rs.getString("titulo"));
            liv.setAutor(rs.getString("autor"));
            liv.setEdicao(rs.getInt("edicao"));
            liv.setVersao(rs.getString("versao"));
            liv.setSituacao(rs.getString("situacao"));              
        } catch (SQLException ex) {
            Logger.getLogger(LivroDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return liv;     
    }

E o seguinte método em outra classe chamando o método acima:

private void bBuscarActionPerformed(java.awt.event.ActionEvent evt) {                                        
    int idbusca = -1;
    bSituacao.setEnabled(true);
    bNovo.setEnabled(false);
    bSalvar.setEnabled(true);
    bExcluir.setEnabled(true);
    bCancelar.setEnabled(true);    
    idbusca = Integer.parseInt(tfId.getText());
    l = dao.getLivro(idbusca);
    tfTitulo.setText(l.getTitulo());
    tfAutor.setText(l.getAutor());
    tfEdicao.setText(String.valueOf(l.getEdicao()));
    tfVersao.setText(l.getVersao());  
} 

O idp está sendo passado corretamente na Statement, já verifiquei isso, mas mesmo assim continua a exception que esta sendo disparada
nesta linha:

        stmtGetLivro = con.prepareStatement("SELECT * FROM livros WHERE id = ?");

Agradeço qualquer luz,

Felipe

Você primeiro precisa inicializar a variável con.

Vc vai ter q jogar mais código aqui para analisar…
Provavelmente é o seu objeto ‘con’ que está com problemas… talvez não está sendo instanciado corretamente…
Abraços

Primeiramente, muito obrigado pela resposta

Estou inicializando a variavel ja no construtor da classe, esqueci de postar essa parte do código.

public class LivroDAO implements ILivroDAO{
    private Connection con;
 
    ...  
   
    public void LivroDAO() {
        con = Conexao.getConnection();
    }

Classe Conexao:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Conexao {    
    
    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("com:jdbc:mysql://127.0.0.1/livro", "root", "");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
        }
        return conn;     
    }
}

Alguma outra idéia?

apos vc invocar o metodo executequery, vc deve posicionar o resultset…

ex:

rs = stmtGetLivro.executeQuery();  
rs.next();
//rs.get....

ou senao colocar ele em um laço…

rs = stmtGetLivro.executeQuery();  
while(rs.next())
//rs.get....

abraco

resumindo, isso é um NullPointerException:

Classe qqcoisa = null; qqcoisa.metodoNaoEstatico();

Para evitar…

Classe qqcoisa = new MeuConstrutorPreferido(pa,ra,me,tros); qqcoisa.metodoNaoEstatico();

O motivo disso é, basicamente, que o metodoNaoEstatico PODE se utilizar do estado do objeto para efetuar o seu trabalho e, se a referência é nula, não tem objeto, logo não tem estado.

Se o metodo do exemplo trocasse algum valor de algum atributo interno do objeto, isso não seria possivel pelo motivo explicado.

Uma Exception é seguida de um StackTrace, que diz aonde ele aconteceu, isso costuma ser muito elucidativo. Procure ler e interpretar as Exceptions e suas StackTraces pois isso é informação que, normalmente, te ajuda a identificar rapidamente o problema.

Perceba que fazer isso

Classe qqcoisa = outraCoisa.outroProcedimento(); if(qqcoisa != null){ qqcoisa.metodoNaoEstatico(); }

É tentador, porém não abuse, dá cheiro ruim no código, que vc pode evitar de muitas formas :wink:

Pessoal,

Como tinha falado:

"Estou inicializando a variavel ja no construtor da classe, esqueci de postar essa parte do código. "

Porém o que eu não vi, e ninguém percebeu também, é que coloquei void no construtor :oops:

Por isso nao estava sendo executado na instanciação.

Obrigado a todos pela atenção,

Felipe