Recuperando 1º registrro do banco de dados

4 respostas
S

Bom dia a todos,

Tenho uma tela de cadastro de logradouro, onde contem 2 JTextField, 1 é o código do logradouro e a outra é o nome do logradouro. Quando clico no botão primeiro essas JTextfields irão receber o 1º registro do banco.
Ação do meu botão

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

Meu DAO do logradouro

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

Mas esse código está voltando a seguinte SQLException " Operação inválida para encaminhar apenas conjunto de resultados: first"

Pq isso?

Atc,
Fernando.

4 Respostas

B

você pode buscar o primeiro logradouro de maneira mais direta:

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

Cara o que você está fazendo está errado, a operação que você está invocando First(), move para o primeiro registro mas você está com um resultset navegavel?

o seu problema pode ser resolvido assim:

ResultSet rs = pstmt.executeQuery();  
Logradouro logradouro = null;
if (rs.next()){
    logradouro = new Logradouro();
    logradouro.setCodigo(rs.getString("codigo"));  
    logradouro.setNome(rs.getString("nome"));  
}
return logradouro;

ao executar uma consulta você já está sobre o primeiro registro e o next responde “tenho registro?” se sim le ele e retorna.

S

Valeu pela dica, não entendi pq do if(rs.next()), quando eu faço ("select min(codigo) from logradouro, ele já não trás o menor código, depois é só setar no meu bean ?

euprogramador

santos.fernando:
Valeu pela dica, não entendi pq do if(rs.next()), quando eu faço ("select min(codigo) from logradouro, ele já não trás o menor código, depois é só setar no meu bean ?

a sua consulta não era min mas sim uma select normal, no resultset o next verifica se ele possui registos para serem lidos e passa para o proximo registo.

caso você quisesse ler todos bastava fazer um while

while(rs.next()){
logradouro.setNome(rs.g......);
}

assim quando não tivesse mais registros ele pararia de ler.

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