PreparedStatement Navegável com método next()

4 respostas
S

Olá pessoal, estou com a seguinte dificuldade, tenho uma tela que contém vários botões, primeiro registro, próximo registro, registro anterior e último registro. Acontece que o primeiro e o último registro consegui fazer, pois o próximo registro e o registro anterior ainda não. vejam o código.
Código do evento do botão.

if(e.getSource() == btnProxRegistro){
			LogradouroDAO dao = new LogradouroDAO();
			LogradouroBean bean = new LogradouroBean();
			bean = dao.proximoRegistro();
			txtCodigo.setText(bean.getCodigo());
			txtNome.setText(bean.getNome());
			dao.proximoRegistro();
		
		}

Agora é a DAO.

public LogradouroBean proximoRegistro(){
		try{
			LogradouroBean logradouro = new LogradouroBean();
			pstmt = conexao.prepareStatement("select *from logradouro", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
			ResultSet rs = pstmt.executeQuery();
			while(rs.next()){
				logradouro.setCodigo(rs.getString("codigo"));
				logradouro.setNome(rs.getString("nome"));
			}
			return logradouro;
		}
		catch(SQLException e){
			JOptionPane.showMessageDialog(null, e.getMessage());
			return null;
		}
	}

Sempre chama o mesmo dado, mas não avança pro próximo.

Atc,
Fernando.

4 Respostas

castiel

Quando faz uma consulta select * from algumatabela, ele sempre vai trazer o mesmo resultado.
vc vai ter que usar o next() do ResultSet:
resultSet.next(); para na vegar pelos arquivos.

castiel

o seu:
while(rs.next()){

}
vai retornar sempre o ultimo registro, por está passando por todos eles para depois retornar o ultimo registro.
Tente usar um array list para devolver sua pesquisa no banco.

public List<LogradouroBean> proximoRegistro() {
List<LogradouroBean> lista = new ArrayList<LogradouroBean>();
while(rs.next()){
                logradouro = new Logradouro();
                logradouro.setCodigo(rs.getString("codigo"));  
                logradouro.setNome(rs.getString("nome"));  
                lista.add(logradouro);
            }
return lista;
}
S

No caso de eu usar um ArrayList, precisarei criar outro método para atualizar o array, no caso de inserir um novo dado ou da remoção de algum, correto ?

nel

Não Santos.

O que o Castiel quis dizer com a utilização do:

while(rs.next()){ //seu código }

e do ArrayList como ele demonstra no código de exemplo é que seu select (consulta) pode retornar mais do que um registro e para que você possa verificar todos os dados você armazena em um ArrayList para uso posterior.

Quando você efetuar um Delete ou Inserção e logo em seguida chamar este método novamente, automaticamente seu ArrayList será preenchido com os novos dados do banco ok?

Abraços.

Criado 20 de dezembro de 2009
Ultima resposta 20 de dez. de 2009
Respostas 4
Participantes 3