NullPointerException :([RESOLVIDO]

27 respostas
P
Ola, Eu tenho uma classe Aluno DAO onde eu possuo um método que busca todos os dados referentes ao aluno.o método é o seguinte:
public Aluno buscaPorId(int id) throws Exception 
	{
		try { 

			PreparedStatement ps = conexao.prepareStatement("select id, nome,data_nascimento,naturalidade,nacionalidade,nome_pai,nome_mae,estado_civil,endereco_residencial,endereco_profissional,telefone_residencial,telefone_profissional,cpf,rg,orgao_emissor,titulo,zona,secao,turno,num_carne,profissao,turma,sexo,aproveitamento,status from aluno where id = ?");
			ps.setInt(1, id);
			ResultSet resultado = ps.executeQuery();
			if(resultado.next())
			{

				Aluno a = new Aluno();
				a.setId(resultado.getInt("id"));
				a.setNome(resultado.getString("nome"));
				a.setData_nascimento("data_nascimento");
				a.setNaturalidade("naturalidade");
				...
				return a;
			}

			return null;
		} catch (SQLException e) {

			e.printStackTrace();

			throw e;
		}

	}
Ai tenho uma outra classe que eu chamo este método e quero preencher os textfields da mesma.Mas esta ocorrendo o erro nullpointerexception
botaoConsultar.addActionListener (new ActionListener (){   
			public void actionPerformed (ActionEvent e){  

				try {
					Aluno novoAluno =new Aluno();
					AlunoDAO aux=new AlunoDAO();
					int rc = aux.retornaRC(txtNomeAluno.getText(), txtCPF.getText(), txtRG.getText());			
					aux.carregarTodos();
					novoAluno=aux.buscaPorId(rc);
					txtNomeAluno.setText(novoAluno.getNome());//o nullpointer aponta para esta linha
					txtDataNascimento.setText(novoAluno.getData_nascimento());
					...
				}catch (Exception e1) {
					e1.printStackTrace();
				}

			}});
Alguém pode me ajudar a encontrar o erro para que esteja ocorrendo este nullpointer? Obrigada

27 Respostas

pedruhenrik

posta o StackTrace.

att,

I

Posta a saída do seu console, o stack trace do erro, pra gente pode ver em que linha está dando nullpointer

P

No console fica assim:

java.lang.NullPointerException at Cadastro$1.actionPerformed(Cadastro.java:230) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
Obrigada

pedruhenrik

no seu buscaPorId vc tem um if e caso seja false vc retorna um null…já experimentou debugar esses trechos?

att,

P

hmm

coloquei um if neste trecho:

... aux.carregarTodos(); if(aux.buscaPorId(rc)!=null) novoAluno=aux.buscaPorId(rc); ...

o erro não ocorre mas os valores continuam todos vazios =(

I

Talvez seja pq vc não tem um Aluno que atende seus critérios de busca

P

como assim:


Talvez seja pq vc não tem um Aluno que atende seus critérios de busca

?

pedruhenrik

se vc executar a sua query direto no bd algum registro é retornado?

se não retornar nada vai ficar sem valores mesmo.

att,

P

se eu executo no banco retorna os dados …
estou colocando em anexo um print desta pesquisa no banco


P

meninos consegui arrumar fazendo o seguinte:

Aluno novoAluno =new Aluno(); AlunoDAO aux=new AlunoDAO(); novoAluno=aux.buscarPorNome(txtNomeAluno.getText()); [b]int rc=novoAluno.getId(); if(rc>0) { novoAluno=aux.buscaPorId(rc);[/b] txtNomeAluno.setText(novoAluno.getNome()); txtDataNascimento.setText(novoAluno.getData_nascimento()); txtNaturalidade.setText(novoAluno.getNaturalidade()); ...}
Obrigada pela ajuda e explicações!
:smiley:

pedruhenrik

debuga o buscaPorId e o botaoConsultar, vai acompanhando e confirma se o aluno é preenchido.

certifique se q o metodo buscaPorId esta buscando e retornando um aluno, acho q esse é o primeiro passo.

att,

isaiaspf

Paty,

Não tá legal esse seu código. Porque você busca por nome e depois busca por id?

P

hmm eu busco pelo nome para encontrar o id e busco pelo id para buscar os outros dados para ter certeza de que é aquele aluno mesmo pq podem existir varios alunos com nomes iguais =/
mas sim ta feinho meu codigo seria melhor se eu so buscasse pelo id direto =S

isaiaspf

Exatamente. Mas me conta mais sobre o que você quer como resultado que eu tento de ajudar.

P

Eu estou fazendo uma pesquisa e quero mostrar todos os dados pessoais do aluno.
Eu digito o id e quero que sejam preenchidos os textfields com todos os dados do aluno cujo o id for o q eu digitei
obg

isaiaspf
De acordo com sua descrição seria isso aqui:
Aluno novoAluno = new Aluno();  
AlunoDAO alunoDao = new AlunoDAO();  

int alunoId = Integer.parseInt(txtIdAluno.getText());
novoAluno = alunoDao.buscaPorId(alunoId);  

txtNomeAluno.setText(novoAluno.getNome());  
txtDataNascimento.setText(novoAluno.getData_nascimento());
P

Isaiaspf,
acho que é assim mesmo!só ta acontecendo um probleminha da uma olhada neste print da tela q era para ter o resultado da pesquisa!
tipo a unica coisa que vem certo é o nome :frowning:


isaiaspf

Ixi. E você seta todos os text fields com os valores recebidos do banco?

P

aham =D
acho que os campos q estão vazios são os que nao tem nada salvo no banco mas os demais aparece daquele jeito ali :S

P
O problema esta no meu método de pesquisar mas não sei aonde :shock: coloquei um system para vere se os valores estavam sendo setados de forma correta e exibiu os valores q estao sendo trocados nos textfields meu código é o seguinte:
public Aluno buscaPorId(int id) throws Exception 
	{
		try { 
		PreparedStatement ps = conexao.prepareStatement("select id, nome,data_nascimento,naturalidade,nacionalidade,nome_pai,nome_mae,estado_civil,endereco_residencial,endereco_profissional,telefone_residencial,telefone_profissional,cpf,rg,orgao_emissor,titulo,zona,secao,turno,num_carne,profissao,turma,sexo,aproveitamento,status from aluno where id = ?");
			ps.setInt(1, id);
			ResultSet resultado = ps.executeQuery();
			if(resultado.next())
			{

				Aluno a = new Aluno();
				a.setId(resultado.getInt("id"));
				a.setNome(resultado.getString("nome"));
				a.setData_nascimento("data_nascimento");
				...
System.out.println(a.getNome()+"--"+a.getCpf()+"--"+a.getData_nascimento()+"--"+a.getNome_mae()+"--"+a.getNome_pai());
				return a;
			}
			return null;
		} catch (SQLException e) {

			e.printStackTrace();

			throw e;
		}

	}
Obrigada!
isaiaspf

:shock: Uou. Mas então os valores devem estar assim no banco de dados mesmo. Não?

isaiaspf

Já sei. Muda teu sql de busca para:SELECT * FROM aluno WHERE id = ?

P

o nome das colunas do banco estão exatamente como as Strings que passo no resultado.get()
tipo a.setNome(resultado.getString(“nome”)); =>coluna no banco nome
mas sei la vou ver se mexi em mais alguma coisa pois antes estava retornando os valores certos do banco

P

iiiii
mudei o sql mas continua voltando a mesma coisa :confused:

isaiaspf

Eita >.<
Verificando seu código vi que tá assim:a.setData_nascimento("data_nascimento");Tá faltando:a.setData_nascimento(resultado.getString("data_nascimento"));

P

que vergonha :oops: :oops:
mas era isso mesmo agora sim esta funcionando direitinho!!!
muito obrigada Isaias!!

isaiaspf

Hehehe :wink:
O importante é que tá resolvido o problema.

Criado 4 de agosto de 2011
Ultima resposta 5 de ago. de 2011
Respostas 27
Participantes 4