NullPointerExcepiton em objeto de conexão

12 respostas
FelipeWM

Prezados boa noite,
Estou com uma Exceção na miha aplicação de NullPointerException, já verifiquei de todas as maneiras possíveis mas não consegui resolver este problema, daí então vim recorrer a meus experiêntes colegas.
Bem, quando aciono o botão que chama a ação de persistência no banco, o problema ocorre. Por favor se alguém puder me ajudar, agradeço desde já.
Segue abaixo, o trecho do meu código onde é lançada a exceção.

public void cadastraAluno() {

try {
        	con_cad.conecta();
        	String sql = "INSERT INTO aluno VALUES('"+tf_Matricula.getText()+"', '"+tf_Nome.getText()+"', STR_TO_DATE('"+tf_Data_Nasc.getText()+"','%d/%m/%Y'), '"+tf_Nacionalidade.getText()+"')";
			con_cad.statement.executeUpdate(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				
			
			
		}

12 Respostas

pmlm

Um destes é null:
con_cad
tf_Matricula
tf_Nome
tf_Data_Nasc
tf_Nacionalidade

Só tens de correr em modo debug com breakpoints ou colocar uns println para descobrir qual e depois ver o porquê.

Hebert_Coelho

Nullpointer acontece quando algum objeto está null e você tenta acessar algo dentro dele.

Se carro estiver null, você teria esse erro ao acessar: carro.buzinar();

Verifique a mensagem de erro. Ela irá mostrar exatamente a linha do erro.

FelipeWM
Bom dia Amigos,

As linhas do erro em questão são as 433 e 404

A linha 433 trata-se do trecho -> con_cad.statement.executeUpdate(sql);

 a linha 404 trata-se da chamada do método cadastraAluno -> bt_CadastroAluno.addActionListener(new ActionListener() {
@Override
				public void actionPerformed(ActionEvent evt) {
					cadastraAluno();
					
				}
			});
pmlm

Então parece que devo ter errado e provavelmente o que está a null é con_cad.statement

FelipeWM
Bom dia pmnl e JakeFrog.

O que acho estranho é que meu objeto con_cad está instanciado na classe, como estou a mostrar-lhes neste trecho:

public TelaCadAluno(){

/**

* Construtor com método de inicialização dos objetos

*/

con_cad = new Conexao();

con_cad.conecta();

initComponents();
}

Vocês teriam alguma dica do que eu posso fazer?
Abraço.

drsmachado

Usar a tag [code] não é do teu feitio, certo?

FelipeWM
Desculpe, ñ havia me atentado deste detalhe
public TelaCadAluno(){
				/**
				 * Construtor com método de inicialização dos objetos
				 */
				con_cad = new Conexao();
				con_cad.conecta();
				initComponents();
				
				
			}
FelipeWM

Bom dia,
Vocês teriam alguma dica do que eu possa fazer referente a este erro?
Abraço.

pmlm

E onde é inicializado este statement?

FelipeWM
Bom dia pmln, Esse statment é inicializado na classe de Conexão. Segue a classe abaixo:
package view;

import java.sql.*;
import javax.swing.*;

  public class Conexao
  {
      
      final private String driver = "com.mysql.jdbc.Driver";
      final private String url = "jdbc:mysql://localhost/sysaluno";
      final private String usuario = "root";
      final private String senha = "felipe01";
      private Connection conexao;
      public Statement statement;
      public ResultSet resultset;
      
      public boolean conecta() 
      {
          boolean result = true;
          try {
              Class.forName(driver);
              conexao = DriverManager.getConnection(url, usuario, senha);
           // JOptionPane.showMessageDialog(null, "Conectou");
          } catch (ClassNotFoundException Driver) {
              JOptionPane.showMessageDialog(null, "Driver não encontrado"+Driver);
              result = false;
          }
          catch(SQLException Fonte)
          {
              JOptionPane.showMessageDialog(null, "Deu erro na conexão\n"
                      + "com a fonte de dados\n "+Fonte);
              result = false;
          }
          return result;
      }
      public void desconecta(){
          @SuppressWarnings("unused")
		boolean result = true;
           try {
              conexao.close();
              //JOptionPane.showMessageDialog(null, "Banco de dados fechado");
          } catch (SQLException ErroSQL) {
              JOptionPane.showMessageDialog(null, "Não foi possível"
                      + "fechar a conexão com o banco de dados"+ErroSQL.getMessage());
              result = false;
          }
      }
      public void executeSQL(String sql)
      {
          try {
              statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
              resultset = statement.executeQuery(sql);
          } catch (SQLException SQLe) {
              JOptionPane.showMessageDialog(null, SQLe.getMessage());
          }
   
      }
  }
pmlm

É inicializada se chamares o método executeSQL.

No teu caso estas a aceder directamente ao statement, que está a null.

FelipeWM

Boa tarde a pmln,
Consegui resolver o problema, fiz o debug do programa, e verifiquei que o objeto con_cad, não estava sendo populado com os valores do resultset e do statement no momento em que ele era inicializado, então fiz uma query no banco e “populou” o statment e o resultset com seus valores padrões. Agradeço pela disposição em ajudar.
Obrigado a todos.
:slight_smile:

Criado 22 de julho de 2012
Ultima resposta 26 de jul. de 2012
Respostas 12
Participantes 4