Selecionar o primeiro registro do banco Mysql

Boa noite,

Estou tentando criar em meu projeto os botoes (Primeiro, Anterior, Proximo e Ultimo) e gostaria de saber como obter essas informações com persistence e mysql eu jah tentei usar o Limit 1 no sql mas nao deu certo

    public List<Entidade> listar() {
        List<Entidade> rel = null;
        try {
            Query query = em.createQuery("Select e From Entidade e");
            rel = query.getResultList();
        } catch (Exception e) {
            e.getMessage();
        }
        return rel;
    }

essa consulta esta me retornando todos os registros

A interface ResultSet, tem um metodo que retorna o primeiro registro.

first()

Boa sorte.

Boa noite, Fexx

desculpe mas nao consegui encontrar nada a esse respeito a unica funcao q encontrei foi getFirstResult(); mas nao me retornou nada

    public Entidade primeiro(){
        Entidade entidade = null;
        Integer codigo;
        try{
            Query query = em.createQuery("Select e From Entidade e");
            codigo = query.getFirstResult();
            entidade = em.find(Entidade.class, codigo);
        }catch(Exception e){
            e.getMessage();
        }
        return entidade;
    }

vc poderia me explicar melhor

grato

Ola amigo

voce pode fazer essas ações com a propria List que voce retorna do banco e como vc faz um select de todos os elementos do banco ela vai vir ordenada pelo codigo então

para pegar o primeiro elemento use

para pegar o ultimo da lista

Abraços

Pra vc criar um SQL que retorne apenas o primeiro registro você deve usar:

SELECT (*) FROM base.tabela 
ORDER BY (coluna) ASC 
LIMIT 1

(Achei estranho pois disse que não funcionou usando LIMIT. Ele não trouxe resultado algum ou gerou um erro no SQL?)

Para pegar o último valor na base a idéia é a mesma:

SELECT (*) FROM base.tabela 
ORDER BY (coluna) DESC 
LIMIT 1

Não sou muito a favor de trazer para o código coisas que o banco pode realizar, como essas pesquisas simples mesmo para retornar um primeiro valou ou o último valor, até por que se sistema, não deve possuir milhões de registros com acesso concorrente para prejudicar o desempenho ou algo deste tipo.

Espero ter ajudado.

Boa sorte com seus estudos!

Bom dia, DarthCego

muito obrigado pela ajuda.

ficou da maneira que eu precisava abaixo codigo de como ficou

    public Entidade primeiro() {
        Entidade entidade = null;
        try {
            Query query = em.createQuery("Select e From Entidade e");
            List<Entidade> rel = query.getResultList();
            entidade = rel.get(0);
        } catch (Exception e) {
            e.getMessage();
        }
        return entidade;
    }
    
    public Entidade ultimo() {
        Entidade entidade = null;
        try {
            Query query = em.createQuery("Select e From Entidade e");
            List<Entidade> rel = query.getResultList();
            entidade = rel.get(rel.size() - 1);
        } catch (Exception e) {
            e.getMessage();
        }
        return entidade;
    }

    public Entidade anterior(Integer codigo) {
        Entidade entidade = null;
        try {
            Query query = em.createQuery("Select e From Entidade e Where e.iEntidade < " + codigo);
            List<Entidade> rel = query.getResultList();
            entidade = rel.get(rel.size() - 1);
        } catch (Exception e) {
            e.getMessage();
        }
        return entidade;
    }

    public Entidade proximo(Integer codigo) {
        Entidade entidade = null;
        try {
            Query query = em.createQuery("Select e From Entidade e Where e.iEntidade > " + codigo);
            List<Entidade> rel = query.getResultList();
            entidade = rel.get(0);
        } catch (Exception e) {
            e.getMessage();
        }
        return entidade;
    }

agora eu queria tirar mais uma duvida

quando eu clico no botao anterior ou proximo e ele ultrapassa o ultimo registro ele me traz vazio o formulario. eu gostaria que quando nao tivesse mais para trazer ele me desse sempre o ultimo registro…

grato

Assim, ele avança até quando não tem mais registros.

Vc pode fazer assim:

public List<Cidade> proximo() {
		List<Cidade> lista = new ArrayList<Cidade>();
		try {
			pstmt = con.prepareStatement("select * from cidade");
			rs = pstmt.executeQuery();
			Cidade cidade = new Cidade();
			if (!rs.last()) {
			rs.next();
			}
			cidade.setCodigo(rs.getInt("codigo"));
			cidade.setNome(rs.getString("nome"));
			cidade.setUf(rs.getString("uf"));
			
			System.out.println(lista.add(cidade));
			
		} catch (Exception e) {
			System.out.println("Erro: " + e.getMessage());
		}
		return lista;

	}

Assim ele só avança, se for diferente do ultimo. vc pode fazer isso com os demais.

Boa sorte.

e_novaski uma observação apenas.

Como citei sou contra de você trazer algumas ações para o programa que o SGBD pode realizar tranquilamente.

Seu método primeiro() retorna todos os registro em seu SQL, veja bem, isso é totalmente desnecessário, tendo em vista que quer apenas o primeiro assim como o método ultimo(). Apenas uma pequena sugestão para melhorar sua aplicação, mas já visando desempenho, até por que você alimenta uma lista, com n valores para pegar apenas um entende? A sugestão de SQL que dei pode resolver isto tranquilamente.

Boa sorte com seu programa.

Espero que possa ter lhe ajudado.

Ai vai…

Ordene ASC ou DESC e use o setMaxResult…

Ai vc pega apenas um registro sem trazer a lista toda para a memória pra depois escolher apenas um… Isso é terrivel para performance.

public Entidade primeiro(){  
    Entidade entidade = null;  
    Integer codigo;  
    try{  
        Query query = em.createQuery("Select e From Entidade e order by id ASC");  
        codigo = query.getFirstResult(); 
        query.setMaxResult(1);
        entidade = em.find(Entidade.class, codigo);  
    }catch(Exception e){  
        e.getMessage();  
    }  
    return entidade;  
} 

Abs