ResultSet Perdendo informação [Resolvido]

7 respostas
wagne23

Bom dia, estou desenvolvendo um sitema que tem uma parte de busca atravez de uma JTable com os dados salvos no MySQL, o problema é que quando eu realizo uma pesquisa e mando exibir os resultados na tabela eu sempre perco o primeiro registro. Ja procurei em varios lugares onde esta o erro mas nada ainda. Se alguem puder me ajudar. Segue o meu codigo:

Com esse codigo eu pego os dados da pesquisa e executo a query e mando pra tabela os resultados:

public void mostraPesquisa() {
		String nome = txtNome.getText();  // le os dados do form
		String end = txtEnd.getText();
		String cpf = txtCpf.getText();
		String rg = txtRg.getText();

		FuncionarioDAO dao = new FuncionarioDAO();
		dao.conecta();
		dao.pesquisa(nome, end, cpf, rg); // envia os dados pra consulta
		ResultSet temp = dao.getResultado(); // retorna o resultado em um ResultSet
		try {
			if (!temp.next()) {  // analiza se a query esta vazia
				JOptionPane.showMessageDialog(null,	" Pesquisa sem Resultados. Verifique e tente novamente.", "Mensagem", JOptionPane.PLAIN_MESSAGE);
			} else {
				ListaFuncionario.limpaTabela(); // limpa a tabela antes de inserir o resultado
				try {
					while (temp.next()) {   //faz uma iteração
						String[] row = { temp.getString("nome"),
								        temp.getString("endereco"),
									temp.getString("cpf"), 
									temp.getString("rg") };
						ListaFuncionario.modelo.insertRow(0, row); //adiciona da tabela
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
				dispose();
			}
		} catch (SQLException e1) {
			e1.printStackTrace();
		}

	}

Aguardo sugestões. Abraços!!!!!!!!!!

7 Respostas

nbluis

Quando você faz temp.next() ele move o cursor para o próximo registro.

Então se você faz !temp.next() para saber se existe, na primeira iteração do while(temp.next()) ele move para a posição 2 perdendo o primeiro.

wagne23

Muito obrigado nbluis, eu percebi que ele stava passando pro 2º registro quando eu vazia a verificação se ele tinha algum resultado então eu tirei essa verificação e funcionou certinho. Mas como eu posso faser essa verificação pra saber se a colsulta obteve algum resultado sem usar o temp.next() ???
Abraços!!!

P

Se não me engano você pode usar temp.isAfterLast(). Caso retorne true, significa que você está após a última linha do ResultSet, ou seja, o ResultSet está vazio…

Do javadoc:

peczenyj

da uma olhada aqui:

http://www.guj.com.br/java.tutorial.artigo.120.1.guj

E um bom exemplo:

http://www.java2s.com/Code/JavaAPI/java.sql/ResultSetnext.htm

wagne23

Ai gente, consegui resolver. Tentei usar o isAfterLast() mas ele move o cursor assim mesmo como o next(), então o que eu fiz foi continuar usando o next() e depois quando eu vou usar o while eu uso previous() pra voltar o cursor uma posição. Valeu gente.

peczenyj

cuidado pois vc pode não ter nada para retornar no previous() :wink:

wagne23

Mas acho que não vai dar erro porque eu primeiro verifico se temp.next() fazendo um if, se for false ele abre um JOptionPane e termina por ai, so no caso contrario de temp.next() retornar true ele executa o previous().

Criado 21 de julho de 2008
Ultima resposta 21 de jul. de 2008
Respostas 7
Participantes 4