Array List - Apresenta a mensagem java.lang.NullPointerException -Não consigo encontrar a falha

14 respostas
Swe777

Todas as vezes que chamo a rotina listEmpresas() dá o erro java.lang.NullPointerException.
Porém não consegui identificar a origem do ponteiro nulo, visto que a query executada retorna valores tipo String.
Qual seria a solução para este problema?

Swe777

Segue o código da função:

public List<Empresa> listaEmpresas(){ List<Empresa> empresas = new ArrayList <Empresa>(); PreparedStatement ps = null; try { ps = conn.prepareStatement("SELECT * " + "FROM tbEmpresa"); ResultSet rs = ps.executeQuery(); while(rs.next() == true) { Empresa empr = new Empresa(rs.getString("CO_EMPRESA"),rs.getString("NU_CNPJ")); empresas.add(empr); } ps.close(); } catch (SQLException ex){ System.out.println(ex.toString()); } return empresas; }

14 Respostas

Y

Onde esta sendo instanciada a conexao? De onde vem o objeto conn?

Hebert_Coelho

Em qual linha do método você está tendo o nullpointer?

Swe777

A conexão é realizada pela classe conexao.
As operações de consulta, inserção e alteração funcionam normalmente.

A intenção do código é preencher uma combobox na GuiPalestrante com os dados que estão numa tabela no SQL Server.

Esta função é chamada em uma rotina dentro de outra classe.
Segue a rotina chamadora (está dentro da classe GuiPalestrante):

public void preparaComboBox(){ cbxEmprPal.addItem(""); empresas = daoEmpresa.listaEmpresas(); //linha em que ocorre o erro cbxEmprPal.addItem(""); int i = 0; while (empresas.get(i).getCnpj() != null) { cbxEmprPal.addItem(empresas.get(i).getCnpj()); i++; } }

N

Se essa linha que disse estar gerando o NullPointerException for a primeira do Stack, a referência daoEmpresa está nula.
Essa referência está recebendo um objeto em algum lugar?

Luiz_Augusto_Prado

mostra a classe empresa e a query de criação de sua tabela pra gente dar uma olhada

Swe777

Segue o código da classe Empresa

package poo.projeto.model;

public class Empresa{
	private String Cnpj;
	private String Codigo;


	public Empresa(String codigo, String cnpj) {
		Cnpj = cnpj;
		Codigo = codigo;	
	}


	public String getCnpj() {
		return Cnpj;
	}


	public void setCnpj(String cnpj) {
		Cnpj = cnpj;
	}


	public String getCodigo() {
		return Codigo;
	}


	public void setCodigo(String codigo) {
		Codigo = codigo;
	}
}

Aqui está a query de criação das tabelas

CREATE TABLE tbGeral
( NU_CPFCNPJ VARCHAR (20)NOT NULL,
NO_NOME VARCHAR(30)NOT NULL,
DE_ENDERECO VARCHAR(30)NOT NULL,
NO_BAIRRO VARCHAR(20)NOT NULL,
NO_CIDADE VARCHAR(20)NOT NULL,
NU_CEP VARCHAR(9)NOT NULL,
NO_ESTADO VARCHAR(30)NOT NULL,
NU_TELEFONE VARCHAR(15)NOT NULL,
DE_EMAIL VARCHAR(30)NOT NULL,
NU_RG VARCHAR (20)NOT NULL,
CO_CONV VARCHAR (1))

ALTER TABLE tbGeral
ADD CONSTRAINT PK_NU_CPFCNPJ
PRIMARY KEY(NU_CPFCNPJ)

CREATE UNIQUE INDEX I_NU_RG
ON tbgeral(NU_RG)

CREATE TABLE tbAluno
(CO_REGISTROALU VARCHAR(10)NOT NULL,
NU_CPFALU VARCHAR (20) NOT NULL,
NO_CURSOALU VARCHAR(30)NOT NULL)

ALTER TABLE tbAluno
ADD CONSTRAINT PK_CO_REGISTROALU
PRIMARY KEY(CO_REGISTROALU)

ALTER TABLE tbAluno
ADD CONSTRAINT FK_NU_CPFALU
FOREIGN KEY(NU_CPFALU)
REFERENCES tbGeral(NU_CPFCNPJ)

CREATE TABLE tbProfessor
( CO_REGISTROPROF VARCHAR(10)NOT NULL,
NU_CPFPROF VARCHAR (20) NOT NULL,
NO_CURSOPROF VARCHAR(10)NOT NULL,
NO_DEPTOPROF VARCHAR (15) NOT NULL)

ALTER TABLE tbProfessor
ADD CONSTRAINT PK_NU_REGISTROPROF
PRIMARY KEY(CO_REGISTROPROF)

ALTER TABLE tbProfessor
ADD CONSTRAINT FK_NU_CPFPROF
FOREIGN KEY(NU_CPFPROF)
REFERENCES tbGeral(NU_CPFCNPJ)

CREATE TABLE tbEmpresa
( CO_EMPRESA VARCHAR (11) NOT NULL,
NU_CNPJ VARCHAR (20) NOT NULL
)

ALTER TABLE tbEmpresa
ADD CONSTRAINT PK_CO_EMPRESA
PRIMARY KEY(CO_EMPRESA)

ALTER TABLE tbEmpresa
ADD CONSTRAINT FK_NU_CNPJ
FOREIGN KEY(NU_CNPJ)
REFERENCES tbGeral(NU_CPFCNPJ)

CREATE TABLE tbPalestrante
( CO_PAL VARCHAR(10)NOT NULL,
NU_CPFPAL VARCHAR (20) NOT NULL,
CO_EMPRESA VARCHAR (11) NOT NULL,
NO_AREAPAL VARCHAR(30)NOT NULL)

ALTER TABLE tbPalestrante
ADD CONSTRAINT PK_CO_PAL
PRIMARY KEY(CO_PAL)

ALTER TABLE tbPalestrante
ADD CONSTRAINT FK_NU_CPFPAL
FOREIGN KEY(NU_CPFPAL)
REFERENCES tbGeral(NU_CPFCNPJ)

ALTER TABLE tbPalestrante
ADD CONSTRAINT FK_CO_EMPRESA
FOREIGN KEY(CO_EMPRESA)
REFERENCES tbEmpresa (CO_EMPRESA)

Luiz_Augusto_Prado

Então a sua variavel conn deve etar vindo nula.

Swe777

As outras operações (consulta, inserção e alteração) funcionam…

Luiz_Augusto_Prado

tenta criar uma variavael conn2 dentro do metodo e testa pra ver se o erro continua.
Eu não sei como vc delcarou suas variaveis globais nem como as inicializou. por isso fica um pouco dificil te ajudar

Swe777

Segue a classe daoEmpresa. Dela deverão vir os dados para preencherem um combobox na classe GuiPalestrante.
A função listaEmpresas está no final do código.

package poo.projeto.control;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
 


import fatec.poo.projeto.model.Empresa;



public class DaoEmpresa {

    private Connection conn;
    
    
    public DaoEmpresa(Connection conn) {
         this.conn = conn;
    }
    
    public void gravar(Empresa empresa) {
        PreparedStatement ps = null;
        try {
        	
        	
        	ps = conn.prepareStatement("INSERT INTO tbempresa (CO_EMPRESA, NU_CNPJ) VALUES(?,?)");
	 
     	 ps.setString(1,empresa.getCodigo());
     	 ps.setString(2,empresa.getCnpj());
     	 ps.execute();
     	
        	} catch (SQLException ex) {
        	System.out.println(ex.toString());  
        }
}

    public void alterar(Empresa empresa) {
        PreparedStatement ps = null;
        try {   	
        	ps = conn.prepareStatement("UPDATE tbempresa SET NU_CNPJ = ? WHERE CO_EMPRESA = ?"); 
        	
        	ps.setString(1, empresa.getCnpj());
        	ps.setString(2, empresa.getCodigo());
        	ps.execute();
	 
        	} catch (SQLException ex) {
        	System.out.println(ex.toString());   
        }
}

   public  Empresa consultar (String Cod) {
    	Empresa emp = null;
    	

    	PreparedStatement ps = null;
    	try {
    

 			ps = conn.prepareStatement("SELECT * FROM tbempresa where CO_EMPRESA = ?");
 	 		
 			ps.setString(1, Cod);
 			ResultSet rs = ps.executeQuery();
 			
 			if (rs.next() == true){
	
 			emp = new Empresa (rs.getString("CO_EMPRESA"), rs.getString("NU_CNPJ"));
 			ps.close();
 			}
    	}
    	catch (SQLException ex) { 
    		System.out.println(ex.toString());
    		return(emp);
    	}
    	return (emp);
    } 
   
   
   
   public Empresa consultarCnpj (String Cnpj) {
	   Empresa emp = null;

   	PreparedStatement ps = null;
   	try {
   

			ps = conn.prepareStatement("SELECT * FROM tbempresa where NU_CNPJ = ?");
			ps.setString(1, Cnpj);
			ResultSet rs = ps.executeQuery();
	
			
			if (rs.next() == true){
				emp = new Empresa (rs.getString("CO_EMPRESA"), rs.getString("NU_CNPJ")); 
	 			ps.close();
			}
   	}
   	catch (SQLException ex) { 
   		System.out.println(ex.toString());
   	}
   	
   	return (emp);
   }
   
   
   
    public void excluir(Empresa empresa) {
    	PreparedStatement ps = null;
    	try {
    		ps = conn.prepareStatement("DELETE FROM tbempresa where NU_CNPJ = ?");
    		ps.setString(1, empresa.getCnpj());
    		ps.execute();
	
    		
    	} catch (SQLException ex) {
    		System.out.println(ex.toString());   
    	}
    
    }
    
    
 
    
    
    
    public List<Empresa> listaEmpresas(){
    	List<Empresa> empresas = new ArrayList <Empresa>();
    	PreparedStatement ps = null;
	   try {              
		   ps = conn.prepareStatement("SELECT * " +
										"FROM tbEmpresa");
		   ResultSet rs = ps.executeQuery();
		   while(rs.next() == true)  
		   {	  	
			   Empresa empr = new Empresa(rs.getString("CO_EMPRESA"),rs.getString("NU_CNPJ"));  
			   empresas.add(empr);
		   }  
		   ps.close(); 
	   }
	   catch (SQLException ex){
		   System.out.println(ex.toString());
	   }
		   return empresas;
	   }

}
Luiz_Augusto_Prado

ve se isso funciona

public List<Empresa> listaEmpresas(){
    	List<Empresa> empresas = new ArrayList <Empresa>();
	   try {           
		   Statement ps = conn.createStatement();
		   ResultSet rs = ps.executeQuery("SELECT * FROM tbEmpresa");
		   while(rs.next() == true)  
		   {	  	
			   Empresa empr = new Empresa(rs.getString("CO_EMPRESA"),rs.getString("NU_CNPJ"));  
			   empresas.add(empr);
		   }  
		   ps.close(); 
	   }
	   catch (SQLException ex){
		   System.out.println(ex.toString());
	   }
		   return empresas;
	   }
Swe777

Após implementar o código sugerido ainda apresentou nullPointerException

pmlm

Em vez daquela println da exception, coloca

ex.printStackTrace();

E depois põe aqui a stack completa da exception

Swe777

Colegas

Após instanciar a DaoEmpresa passando os parâmetros de conexão, funcionou.

daoEmpresa = new DaoEmpresa(conexao.conectar()); empresas = daoEmpresa.listaEmpresas();

Agradeço a todos pela ajuda!

Swe777

Criado 4 de dezembro de 2011
Ultima resposta 5 de dez. de 2011
Respostas 14
Participantes 6