Tô apanhando para fazer a navegação << < > >>

7 respostas
V

Colegas

Este tópico está tambem lá em Java Básico mas, como apenas um colega me respondeu, e eu não consegui resolver, resolvi postar aqui também.

Estou apanhando para navegar em registros dentro de BD lá em minha Pagina WEB

Sei que << é rs.first();
< rs.previous()

rs.next();

rs.last();

Porem eu não consigo navegação, o Servlet me retorna sempre o mesmo registro para minha JSP.

O código do Servlet é este :

public CidadeVO le(CidadeVO cidade,String acao) throws SQLException{
		con = conex.Abre_Conexao(con, Constantes.BANCO);
		ResultSet rs = null;
		
		try{
			if (acao.equals(Constantes.ACAOANTERIOR)){
				stmt = con.prepareStatement("select CodCidade,DescCidade,RegCidade from cidade where DescCidade=? order by DescCidade",rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_READ_ONLY);
				stmt.setString(1,cidade.getDescricao());
				rs = stmt.executeQuery();
				if(! rs.isFirst()) 
		          rs.previous();
			}else if (acao.equals(Constantes.ACAOPROXIMO)){
					stmt = con.prepareStatement("select CodCidade,DescCidade,RegCidade from cidade where DescCidade=? order by DescCidade",rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_READ_ONLY);
					stmt.setString(1,cidade.getDescricao());
					rs = stmt.executeQuery();
					if(!rs.isLast())
						rs.next();
			}else if (acao.equals(Constantes.ACAOLER)){
				stmt = con.prepareStatement("select CodCidade,DescCidade,RegCidade from cidade where CodCidade =?");
				stmt.setInt(1, cidade.getId());
				rs = stmt.executeQuery();
				rs.next();
			}
	    		cidade = new CidadeVO();
	    		cidade.setId(rs.getInt(1));
	    		cidade.setDescricao(rs.getString(2));
	    		cidade.setRegional(rs.getInt(3));
	    		return cidade;

Algum filho de Deus pode me ajudar ? Estou garrado nisso !

:cry: Vimieiro

7 Respostas

esb

Caro vimieiro,

  1. Nao duplique seus posts, como voce mesmo admitiu…

  2. O ResultSet “morre” depois que a resposta eh enviada do servidor para o navegador. Nao eh algo que fica esperando que voce o requisite. Voce envia a requisicao para o seu servlet, este processa a consulta, e retorna os dados pro navegador. Apos isso o ResultSet nao existe mais, e quando voce requisita um > ou >> para seu servlet, uma nova consulta e feita, e um novo ResultSet eh gerado.

  3. Tente aprender a biblioteca displaytag para efetuar paginacao. Ela eh bem facil.

  4. Quando puder de uma estudada em MVC.

Abracos!
Eduardo

M

Acho que vale a pena dar uma olhada em http://java.sun.com/blueprints/corej2eepatterns/Patterns/ValueListHandler.html.

De uma olhada tb no displaytag, como o esb citou.

Abracos,
Marco.

V

Falou gente, vou dar uma olhada nos tópicos que vcs me indicaram.Muito obrigado

A respeito do tópico esta duplicado é o desespero ! heheheh
Prometo que vou evitar.

Vimieiro

V

Caro Esb eu não estou querendo fazer paginação !!!

O que quero é simplesmente mover de registro na tela de Exibição atraves dos botões ANTERIOR E PROXIMO.

Sei que temos que trabalhar na WEB de modo desacoplado por isso eu “capturo” a variavel de request Descricao e lá no Servlet eu leio a tabela ordenado pela descrição e pego o próximo registro !!!
Para mim tinha que funcionar !

Estou errado ?

esb

vimieiro:
Caro Esb eu não estou querendo fazer paginação !!!

O que quero é simplesmente mover de registro na tela de Exibição atraves dos botões ANTERIOR E PROXIMO.

Sei que temos que trabalhar na WEB de modo desacoplado por isso eu “capturo” a variavel de request Descricao e lá no Servlet eu leio a tabela ordenado pela descrição e pego o próximo registro !!!
Para mim tinha que funcionar !

Estou errado ?

Vimieiro,

Não tinha que funcionar. Querendo ou não fazer paginação, o raciocínio é o mesmo. Você leu o que eu disse a respeito do ResultSet “morrer” após você fazer a primeira consulta? Então vamos supor os dados:

1 FULANO 2 BELTRANO 3 BLA BLA BLA

  1. Você abre a sua página e clica em “Consultar”.
  2. A consulta é feita.
  3. O registro “1 FULANO” é retornado.
  4. O ResultSet é fechado.
  5. Você aperta o botão >
  6. Uma NOVA consulta é feita.
  7. O registro “1 FULANO” é retornado novamente.
  8. O ResultSet é fechado.

Você pode resolver isso usando displaytag para paginação. Como você não quer paginar, provavelmente carregar esses dados em campos ou simplesmente apresentá-los, você tem que controlar o intervalo da sua consulta. No Oracle, por exemplo, você pode controlar isso com rownum. Ficaria dessa forma:

  1. Você abre a sua página e clica em “Consultar”.
  2. A consulta é feita.
  3. O registro “1 FULANO” é retornado.
  4. O ResultSet é fechado.
  5. Você guarda em algum lugar que você pegou o primeiro registro.
  6. Você aperta o botão >
  7. Uma NOVA consulta é feita, com a informação guardada (primeiro registro) + 1.
  8. O registro “2 BELTRADO” é retornado.
  9. Você guarda em algum lugar que você pegou o segundo registro.
  10. O ResultSet é fechado.

Ponto importante:

Não esqueça de fechar suas conexões.

Boa sorte!
Eduardo

V

cê tá coberto de razão

Obrigado

Vimieiro

V

Esb consegui resolver veja o que fiz :

Através de rs.getRow() que é a posição atual do ponteiro na Tabela eu passo para o JSP esta posição.
Quando vou ler o registro anterior eu pego novamente esta posição e leio a tabela através de rs.absolute() e dou rs.previous() e guardo novamente a nova posição e assim por diante.

Não sei se foi a melhor alternativa mas está funcionando bem.

Muito obrigado mesmo pela explicação

Vimieiro :lol: :lol: :lol:

Criado 13 de fevereiro de 2008
Ultima resposta 14 de fev. de 2008
Respostas 7
Participantes 3