Pesquisa pega so o primeiro nome do banco,se há nomes iguais.[resolvido]

27 respostas
P
Ola, Tenho um cadastro de alunos onde sua busca é feita pelo Id de cada um,mas como há alunos com o mesmo nome se eu busco pelo ultimo com o mesmo nome que foi cadastrado, sempre retorna o que foi cadastrado primeiro =( há algum código que permita esta busca de forma correta?ou tem algo errado no meu código que não me permite fazer a pesquisa? Este é meu código de pesquisa?
if(txtRC.getText()!=null)
					{
						resultado=comando.executeQuery("select nome,turma,turno from aluno where Id='"+txtRC.getText()+"'");
						if(resultado.next())
						{		
							txtNome.setText(resultado.getString(1));
							txtTurma.setText(resultado.getString(2));
							txtTurno.setText(resultado.getString(3));
						}
						carregaDisciplinas();

					}
Obrigada pela ajuda, =)

27 Respostas

W

Adicione um ORDER BY, ex:

resultado=comando.executeQuery("select nome,turma,turno from aluno where Id='"+txtRC.getText()+"' ORDER BY Id DESC");

DESC significa que vai ordernar os dados do maior Id para o menor, entao se vc tiver dois alunos com o mesmo nome, o ultimo aluno cadastrado vai ficar sempre em primero na lista.

Soh vai funcionar se vc tiver um ID que pode ser ordenado, claro.

Se vc tiver a data de cadastro tb funcionaria para ordenar colocar o ultimo cadastrado no topo da lista.

//Daniel

duduribeiro

você tem que colocar a lógica de leitura do ResultSet em um laço
por exemplo

while(resultado.next())  
                         {         
                             txtNome.setText(resultado.getString(1));  
                             txtTurma.setText(resultado.getString(2));  
                             txtTurno.setText(resultado.getString(3));  
                         }  
                         carregaDisciplinas();
P

Oi windsofhell,
acho que não expliquei direito mas vou tentar ser mais clara através deste exmplo:
Cadastrei os alunos:
Joao id 2
JOAO id 15
joao id 17

se eu faço a pesquisa como eu havia postado antes pelo rc 15 ou 17 ele troca pelo Joao de id 2 =(

Eu usei o ORDER BY Id DESC e a gora se eu pesquiso JOAO id 15 me retorna o joao de id 17 =(

o que eu gostaria que acontecesse era que cada aluno viesse certinho de acordo com o id mesmo que haja outros com nomes iguais

não sei se tu me entendeu agora é que eu não explico muito bem =( mas era isso
obrigada pela ajuda!
:slight_smile:

W

duduribeiro:
você tem que colocar a lógica de leitura do ResultSet em um laço
por exemplo

while(resultado.next()) { txtNome.setText(resultado.getString(1)); txtTurma.setText(resultado.getString(2)); txtTurno.setText(resultado.getString(3)); } carregaDisciplinas();

Boa, nem tinha reparado nao tem um laco no codigo, so vai pegar somente um registro.

W

paty_trind:
Oi windsofhell,
acho que não expliquei direito mas vou tentar ser mais clara através deste exmplo:
Cadastrei os alunos:
Joao id 2
JOAO id 15
joao id 17

se eu faço a pesquisa como eu havia postado antes pelo rc 15 ou 17 ele troca pelo Joao de id 2 =(

Eu usei o ORDER BY Id DESC e a gora se eu pesquiso JOAO id 15 me retorna o joao de id 17 =(

o que eu gostaria que acontecesse era que cada aluno viesse certinho de acordo com o id mesmo que haja outros com nomes iguais

não sei se tu me entendeu agora é que eu não explico muito bem =( mas era isso
obrigada pela ajuda!
:slight_smile:

Eh, acho que a solucao pro seu problema eh como o duduribeiro respondeu, coloca dentro de um loop, porem, se vc ficar isso:

txtNome.setText(resultado.getString(1));    
txtTurma.setText(resultado.getString(2));    
txtTurno.setText(resultado.getString(3));

Se op resultado tiver mais de um aluno, vai sobreescrever os resultados dos text boxes. O ideal era carregar uma tabela ou coisa do tipo

//Daniel

P
Meninos eu usei um if ao inves de um while pq vou pegar um aluno de cada vez de acordo com o id que for digitado :( troquei o if pelo while e meu codigo esta assim agora:
if(txtRC.getText()!=null)
					{
						resultado=comando.executeQuery("select nome,turma,turno from aluno where Id='"+txtRC.getText()+"'");
						while(resultado.next())
						{		
							txtNome.setText(resultado.getString(1));
							txtTurma.setText(resultado.getString(2));
							txtTurno.setText(resultado.getString(3));
						}
						carregaDisciplinas();

					}
mas continua retornando o primeiro cadastrado :(

obrigada pela ajuda!
:)

duduribeiro

você ta setando ojtextfield toda vez que passa no while, (ele vai colocar o valor por cima do que está atualmente)

coloca a saida num sysout e verifica se o resultset está trazendo todos registros

P

oi duduribeiro,
eu coloquei o System como tu disse e imprimiu o joao do id 2 =(
isso ta acontecendo pq os nomes são iguais mesmo que os id’s sejam diferentes?
na minha tela tem uma campo para te digitar o id ai eu digito 15 e troca o id para 2 e vem as informacoes do joao com id 2 :frowning:

duduribeiro

esse campo txtRC contem o código ou o nome ??

P

txtRc contem o codigo/id do cadastro

duduribeiro

quando você executar a query "select nome,turma,turno from aluno where Id='"+txtRC.getText()+"'"
ele vai trazer somente o registro do código que você digitou

por isso está trazendo somente do id 2…

P

esse é o problema eu não estou digitando 2 e sim 15
pensei que estivesse acontecendo isso pq tanto o aluno do id 2 quanto o do id 15 tem o mesmo nome :roll:

duduribeiro

estranho…e na hora do laço o txtRC.getText() está com o valor 15?

TheKill

Tente fazer nessa lógica

if(txtRC.getText()!=null)  
                {  
                    resultado=comando.executeQuery("select nome,turma,turno from aluno where Id='"+txtRC.getText()+"'");  
                    while(resultado.next())  
                    {     
                     Discipinhas disciplinas = new Disciplinhas();
                     disciplinas.setNome(resultado.getString("nome"));
                     disciplinas.setTurma(resultado.getString("turma"));  
                     disciplinas.setTurno(resultado.getString("turno"));  
                    }  
                    //carregaDisciplinas();  
                    adicionaDisciplinas(disciplinas);
                    carregaDisciplinas();
                }
P

sim o txtRC.geteText() tem valor 15 ai quando eu clico em pesquisar ele troca o rc e os outros dados para o aluno joao do id 2
e o pior é que eu uso uma pesquisa igual a esta em outra tela e na outra tela funciona =( eu ate tava pensando sera que não é algum bug nesta minha versão do eclipse?

TheKill

nao é bug, vc nao esta criando um novo objeto, ele esta salvando apenas o ultimo elemento do ResultSet

P

oi TheKill
acho que estou fazendo nesta mesma lógica:
faço a verificação se o campo de texto não é null;
ai pego o resultado da pesquisa e insiro nos campos correspondentes…
não sei pq ta acontecendo esta falha na pesquisa :frowning:

mas pq eu preciso criar um novo objeto ?os meus textfields ja foram criados no inicio da classe eu apenas quero trocar o texto deles …
eu preciso criar eles ali dentro e só declara-los no inicio da classe?

TheKill

vc nao entendeu.

Vc nao esta dando um Disciplinas disciplinas = new Disciplinas();

Sempre que ele passar no while(…) vc precisa criar um novo objeto para o resultaod.

e depois sim, trabalhar com esse objeto. Vc esta fazendo o seguinte!

String a,b,c;

while(...){
//1 linha do while
a = "a';
b= "b";
c= "c";

//2 linha do while
a = "d";
b = "e";
c = "f";
}

System.out.print(a + " "+b + " "+c);
//Resposta: d e f
P

não to te entendendo eu não uso um while eu uso um if pq eu quero um resultado de cada vez…
eu digito no campo txtRc o id do aluno q eu qro pesquisar ai vem outros dados relacionados a este aluno…
o que esta acontecendo é q eu tenho cadatrado 3 alunos com o mesmo nome e dados diferentes inclusive o id pois ele é unico de cada aluno…
acontece que eu tenho salvo la no banco
joao id 2
JOAO id 15
Joao id 17
se eu digito o id 15 ou 17 ao inves de virem os dados relacionados a eles vem os dados do joao com id 2!!!
esse é o problema eu quero que retorne so os dados do aluno referentes aquele id =(
não sei se tu me entendeu…

TheKill

Se vc colocar no IF, ele vai pegar o primeiro que aparecer! Vai pegar apenas o primeiro que encontrar, e vc quer todos nao é? entao use While

TheKill

Hum, execute o seu sql no seu gerenciador de banco de dados e veja se aparece a resposta correta

P

na verdade eu quero só buscar os dados do aluno cujo o id for o que eu digitei na caixa de texto…não quero os demais alunos

TheKill

entao teu sql esta errado…

P

no banco vem certo o aluno!na aplicação não
mas pq?

TheKill

“select nome,turma,turno from aluno where Id=’”+txtRC.getText()+"’"

ID é Long? Se ele é numero porque as ’ ’ ?
Utilize apenas Integer.parseInt(txtRC.getText())

P

o id é do tipo int e olha so tirei as ‘’ e agora ta funcionando direitinho
:lol: brigada!!!

TheKill

De nada, altere o primeiro topico para [Resolvido] …

Criado 1 de julho de 2011
Ultima resposta 1 de jul. de 2011
Respostas 27
Participantes 4