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

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?

[code]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();

				}[/code]

Obrigada pela ajuda,
=)

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

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();  

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:

[quote=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(); [/quote]

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

[quote=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:
[/quote]

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

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 :frowning:
troquei o if pelo while e meu codigo esta assim agora:

[code] 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();

				}[/code]

mas continua retornando o primeiro cadastrado :frowning:

obrigada pela ajuda!
:slight_smile:

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

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:

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

txtRc contem o codigo/id do cadastro

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…

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:

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

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();
                }

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?

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

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?

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

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…