Uso do next()?

Pessoal,

estou trabalhando numa aplicação na qual a mesma estava dando uns problemas… Fui debungando e encontrei uma coisa que a meu ver, estava correta. Más ai… fazendo uns testes, vi que não estava…

É o seguite… Tenho esse trecho de código aqui…

                                                if (rs.next()) // Testa e entra...
			{

				while (rs.next())  // não consegue entrar no loop... e...
				{

					this.nome = rs.getString("NOME_ALUNO");
					this.senha = rs.getString("SENHA_ALUNO");
				}

				usuario.setNome(nome); // vem direto pra k.

			}
			else return null;

Espero que a esplicação no código tenha ficado clara… Bom… minha dúvida é que se o IF faz somente o teste de condição, por que na condição ele está adiantando o cursor do banco ? Esse é realmente a finalidade desse método tb ? Bom… quando tirei o teste condicional, funfou de primeira.

Alguém que conheça bem esse método pode me dar uma pequena explicação de como é o real funcionamento dele ?

Agradeço a todos. :wink:

nao testei o codig mais usar
if (rs.next()) e depois o
while (rs.next())´acho q é redundancia
pois soh vai entra no while se o “rs” for diferente de 0
se for igual a 0 intao nem vai entrar no while

Não é redundância,

quando se obtém um ResultSet o ponteiro do curso encontra-se no estado beforeFirst.

faz então o chamado do método next(), o mesmo faz duas coisas:

  1. move o ponteiro para a primeira posição;
  2. retorna true

Quando existe mais de um registro, a primeira chamada de next() poe o ponteiro no primeiro registro, a próxima no segundo e assim sucessivamente.

Quando não existir mais registro o método next pode retornar false ou null.

Logo, você já percebeu o erro na sua lógica…

fw

Fonte: http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html

É o que o Dieval disse.

O if faz o teste da condição, mas para isso ele precisa rodar o método next, que adianta o cursor do banco.

Então, no while, vc já tem o cursor adiantado uma vez.