[Resolvido] Erro NullPointerException ao fazer pesquisa no banco de dados

12 respostas
blackfalcon

Segue minha classe abaixo:

package Utilitarios;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;

public class Conexao{
    
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";        
    static final String DATABASE_URL = "jdbc:mysql://localhost/db";
    Connection connection = null; // gerencia a conexão
    Statement statement = null; // instrução de consulta
    public ResultSet resultset = null;
    
    
    
    public void conectar(){
        try {
            Class.forName(JDBC_DRIVER);
            
            // estabelece conexão com o banco de dados
            connection = DriverManager.getConnection( DATABASE_URL, "root", "root" );
            
        } catch (ClassNotFoundException ex) {  
        } catch (SQLException ex) {           
        }
    }
    
    public void desconectar(){
        try                                                        
         {                                                          
            statement.close();                                      
            connection.close();                                     
         }
         catch ( Exception exception )                              
         {                                                          
            exception.printStackTrace();
         }
    }
    
    public void update(String sql){
        try {
            // cria Statement para consultar banco de dados
            statement = connection.createStatement();
            statement.executeUpdate(sql);
            
        } catch (SQLException ex) {   
        }
    }
    
    public void select(String sql){
        try {
            // cria Statement para consultar banco de dados
            statement = connection.createStatement();
            resultset = statement.executeQuery(sql);
        } catch (SQLException ex) {
   
        }
        
    }
}

La no JFrame, para iniciar e conectar faço o seguinte:

public class CadastrarProduto extends javax.swing.JInternalFrame {
    
    Conexao conexao;
    
    /** Creates new form CadastrarProduto */
    public CadastrarProduto(){
        initComponents();
        desabilitarComponentes();
        conexao = new Conexao();
        conexao.conectar();
    }

E depois no botao Primeiro ou Proximo, faço o seguinte:

private void btn_PrimeiroActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            conexao.select("SELECT * FROM ce01");
            while (conexao.resultset.first()) {
                txt_Codigo.setText(conexao.resultset.getString("id"));
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Ocorreu um erro inesperado ao selecionar o primeiro registro!");
        }
    }

   private void btn_ProximoActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            conexao.select("SELECT * FROM ce01");
            while (conexao.resultset.next()) {
               txt_Codigo.setText(conexao.resultset.getString("id")); 
            }
        } catch (SQLException ex) {
            
        }
    }

Alguem saberia o que esta de errado em meu codigo?

Abraços

12 Respostas

dudu_sps

em qual linha está dando o erro??

E

Também pode tentar ver se a configuração de banco está correto, estás usando um Mysql, geralmente o usuário e senha padrão do Mysql e root e a senha é vazia. Podes dar um trace no código abaixo.
Experimente deixar o terceiro parâmetro de getConnection da linha 24 da classe Conexao como “”. O que pode estar acontecendo é que você não está nem conseguindo conectar com o banco de dados.

...
public void conectar(){  
        try {  
            Class.forName(JDBC_DRIVER);  
              
            // estabelece conexão com o banco de dados  
            connection = DriverManager.getConnection( DATABASE_URL, "root", "" );  
              
        } catch (ClassNotFoundException ex) {    
        } catch (SQLException ex) {
                 //Trace aqui
                 ex.printStackTrace();
        }  
    }
...

Aliás, durante a programação, para fins de debug é interessante ver os exceptions para ver como a aplicação está se comportando.

lina

++

Tchauzin!

Vinny

Posta o erro aqui no forúm assim fica mais facil de identificar o problema!

luan03

Você esta passando um parâmetro vazio!

blackfalcon

wellington.nogueira, no caso entao voce diz que eu nao estou conseguindo ver nada com aquele select? wellington, estou começando ainda nessa area de banco de dados. O que é stacktrace?

Sobre o usuario e senha, esta correto, é root e root mesmo.

Abraços

braian

blackfalcon:
wellington.nogueira, no caso entao voce diz que eu nao estou conseguindo ver nada com aquele select? wellington, estou começando ainda nessa area de banco de dados. O que é stacktrace?

Sobre o usuario e senha, esta correto, é root e root mesmo.

Abraços

Depois do catch(Exceção variavel) { variavel.printStackTrace(); }

Serve pra mostrar o “Rastro” de erro.

Mais informações? --> http://www.guj.com.br/posts/list/58349.java

blackfalcon

Segue o erro agora com o printStackTrace:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at Utilitarios.Conexao.conectar(Conexao.java:21) at Cadastros.CadastrarProduto.<init>(CadastrarProduto.java:23) at Retaguarda.jMenuItem10ActionPerformed(Retaguarda.java:162) at Retaguarda.access$100(Retaguarda.java:9) at Retaguarda$3.actionPerformed(Retaguarda.java:116) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.AbstractButton.doClick(AbstractButton.java:357) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1216) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1257) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Eu so nao entendi porque eu instalei o MySQL connector aqui :frowning:

Abraços

S

Você adicionou o .jar do mysql no classpath do seu projeto ?

blackfalcon

Tinha feito um esquema no NetBeans, porem, nao funcionou. Depois, eu procurei aqui no forum novamente e enfim achei uma solução. Foi copiar diretamente para o jre/lib/ext e entao funcionou!

Nao sei se tem algum problema fazer isso, mas pelo menos agora nao esta dando mais o erro ne rsrs.

Porem, agora na hora que eu vou pesquisar no db, o programa trava. Bem, menos mal, conectando esta, agora so tenho que achar o erro que esta fazendo ele travar.

Abraços

WellingtonRamos

Provavelmente seu resultSet deve ter ficado nulo devido a uma exceção do tipo SQLException que vc “tratou” não fazendo nada…
(como vc não postou o stacktrace, não posso confirmar mas se é só qdo clica no botão, provável que sim.

try { // cria Statement para consultar banco de dados statement = connection.createStatement(); resultset = statement.executeQuery(sql); } catch (SQLException ex) { //Coloque algo aqui... ou não trate com try-catch }

Dentro deste bloco try, conexao.select não é tratado (ele não dispara SQLException) e poderia ficar fora (exceto se fosse removido o try-catch de dentro do método select.

try { conexao.select("SELECT * FROM ce01"); while (conexao.resultset.first()) { txt_Codigo.setText(conexao.resultset.getString("id")); } } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Ocorreu um erro inesperado ao selecionar o primeiro registro!"); }

WellingtonRamos
blackfalcon:
wellington.nogueira, no caso entao voce diz que eu nao estou conseguindo ver nada com aquele select? wellington, estou começando ainda nessa area de banco de dados. O que é stacktrace?
Então, Os mais provaveis são:

Você não conseguiu uma Connection válida (algum erro de configuração de acesso) seja no nome do JDBC, seja na url da base de dados ou usuário/senha.
Como vc não tratou corretamente as exceções, não sei se é isso, aí, quando vc faz connection.createStatement(), se connection for null, dispara NullPointerException

Ou então, vc têm a connection e conseguiu o statement, mas ao executar a instrução, houve algum erro (sintaxe, por exemplo) que o SQLException poderia lhe informar, mas novamente não foi tratado corretamente. Assim o resultSet continua nulo.
Ao tentar ler o resultSet, o mesmo está nulo disparando o NullPointerException.

Faz assim:
} catch (SQLException e) {
 e.printStackTRace(); //Vai gerar uma saída com erro (stackTrace)
}

StackTrace é uma saída do sistema que mostra o erro ocorrido e a sequência de métodos executados antes do erro.
Dessa forma, é possível tentar identificar onde o erro ocorreu.

É algo parecido com isso:
Exception in thread "main" java.lang.NullPointerException: Error
	at FileTestes.teste(FileTestes.java:136)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.teste(FileTestes.java:138)
	at FileTestes.main(FileTestes.java:144)
Criado 12 de maio de 2010
Ultima resposta 12 de mai. de 2010
Respostas 12
Participantes 9