Buscar Ultimo Registro no Banco de Dados Postgres

8 respostas
rudimarkaspar

Boa noite sou novo aqui no fórum e estou com uma dúvida, tenho um cadastro de clientes e quando for cadastrar um novo cliente faço a chamada de um novo JDialog, neste por sua vez aparece na tela os campos para preenchimento nome, cpf, rg, endereço ... e o campo "código" já vem preenchido, sendo ele único para cada cliente, para saber qual o próximo código eu acesso meu banco de dados a tabela de clientes(que possui a coluna codigo) e busco o ultimo codigo gerado, mas faço isso usando um "while" e acabo perdendo em desempenho. Como poderia fazer para acessar diretamente o ultimo registro ou o maior registro da coluna "codigo" da tabela clientes do meu banco de dados?

Segue abaixo código que estou utilizando para retornar o código:

public int getCodigoBancoDeDados() {
        int x = -1;
        try {
            Statement stm = con.createStatement();
            String sql = "SELECT codigo from usuarios";
            ResultSet rs = stm.executeQuery(sql);
            while (rs.next()) {
                x = Integer.parseInt(rs.getString("codigo"));
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(ConexaoPostgre.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return x + 1;
    }

Desde já agradeço pela atenção!!!

8 Respostas

charleston10
SELECT MAX(codigo) AS codigo from usuarios
A

A solução do Max funciona mas pode trazer problemas se o sistema possuir mais de um usuário.

Se dois usuários estiverem cadastrando clientes ao mesmo tempo ( veja bem, preencher todos os dados pode demorar alguns minutos), eles terão o mesmo id.
O que tentar salvar por último tomará um erro de chave primária duplicada.

Eu proponho que você não exiba o código para o usuário antes de gravar o cliente.
Até porque esse código é inútil antes de salvar.
Deixe o postgresql gerar o código para você (use um campo do tipo serial) e mostre para o usuário após a gravação do cliente.

MiguelCP

Tentar então com o Count(*), vê se da certo.

R

Pra que voce precisa disso ? Voce ta inserindo uma chave primaria manualmente ? sem incremento ?

charleston10

AbelBueno:
A solução do Max funciona mas pode trazer problemas se o sistema possuir mais de um usuário.

Se dois usuários estiverem cadastrando clientes ao mesmo tempo ( veja bem, preencher todos os dados pode demorar alguns minutos), eles terão o mesmo id.
O que tentar salvar por último tomará um erro de chave primária duplicada.

Eu proponho que você não exiba o código para o usuário antes de gravar o cliente.
Até porque esse código é inútil antes de salvar.
Deixe o postgresql gerar o código para você (use um campo do tipo serial) e mostre para o usuário após a gravação do cliente.

Isso se o programa estiver em rede e ser for um site…
Mas, tambem concordo nao tem pq mostrar codigo para usuario, criar uma SEQUENCE no postgres para criar um auto-incremento…

;]

jeffev

Concordo, acho essa a melhor solução!

rudimarkaspar

Desculpe a demora para responder, muito obrigado pelas dicas vou seguir elas e não vou por o código no ato do casdastro.

Valeu Mesmo

JuniorMaia

depende muito da situação, quando se trabalha com códigos…
Eu desenvolvi um projeto de controle de estoque que o cara queria saber qual era o código do atual produto a ser cadastrado, tive que utilizar o MAX para poder retornar na janela…

Criado 14 de janeiro de 2013
Ultima resposta 16 de jan. de 2013
Respostas 8
Participantes 7