Pegar o último registro no Banco de Dados

12 respostas
fredsilva.sistemas

Olá galera!
Gostaria de saber como eu posso fazer para pegar o último registro inserido no banco de dados?
Não posso usar o “SELECT MAX(ID)”, pois meu banco de dados é utilizado na rede e pode haver concorrência.
Utilizo o PostgreSQL 8.3
Grato!

12 Respostas

peerless

Antes de inserir reserve a sequence pra você.
Exemplo:

int sequenceCliente = sequenceGenerator.next("cliente_seq"); JDBCUtil.execute("insert into cliente (id, nome) values (?,?)", sequenceCliente, "Fulano"); System.out.println("O ultimo cliente adicionado foi:" + sequenceCliente);

D

Você não ordenar sua pesquisa pelo campo e fazer que retorne somente um registro??

fredsilva.sistemas

Vou testar depois eu posto o resultado!
Valeu!

jonestorres

Se esta utilizando postgre, por que não utiliza sequence?

O postgre te oferece isso!

fredsilva.sistemas

peerless:
Antes de inserir reserve a sequence pra você.
Exemplo:

int sequenceCliente = sequenceGenerator.next("cliente_seq"); JDBCUtil.execute("insert into cliente (id, nome) values (?,?)", sequenceCliente, "Fulano"); System.out.println("O ultimo cliente adicionado foi:" + sequenceCliente);

peerless, sequenceGenerator seria alguma classe do Java? Ou isto seria feito no SQL do postgre?

heroijapa
se vc tiver usando PreparedStatement
stmt.executeUpdate(strSQL,Statement.RETURN_GENERATED_KEYS);

ResultSet rs = stmt.getGeneratedKeys();
Se o banco suportar funciona, eu uso Java DB, já tive pau com concorrência e resolveu
AlissonSchneider

Lá na verificação do sql faz o seguinte

será que isso vai lhe ajudar?

abrass

boa sorte

:wink:

peerless

fredsilva.sistemas:
peerless:
Antes de inserir reserve a sequence pra você.
Exemplo:

int sequenceCliente = sequenceGenerator.next("cliente_seq"); JDBCUtil.execute("insert into cliente (id, nome) values (?,?)", sequenceCliente, "Fulano"); System.out.println("O ultimo cliente adicionado foi:" + sequenceCliente);

peerless, sequenceGenerator seria alguma classe do Java? Ou isto seria feito no SQL do postgre?

É só um exemplo, seria uma classe sua cuja finalidade seria recuperar a próxima sequence do banco.

fredsilva.sistemas
heroijapa:
se vc tiver usando PreparedStatement
stmt.executeUpdate(strSQL,Statement.RETURN_GENERATED_KEYS);

ResultSet rs = stmt.getGeneratedKeys();
Se o banco suportar funciona, eu uso Java DB, já tive pau com concorrência e resolveu
Pô achei que seria a solução, mas o Postgre não suporta o retorno de chaves:( Teria uma outra forma?
Andre_Fonseca

oi,

tente fazer o seguinte

abs

fredsilva.sistemas

André Fonseca:
oi,

tente fazer o seguinte

abs


Não funciona, o SGBD diz que sequence não existe, no entanto ela existe!

Andre_Fonseca

oi,

você não está confundindo o nome da seq não? se o problema fosse na função (currval) o erro seria outro.

dá uma lida no manual abaixo

http://www.postgresql.org/docs/8.1/interactive/functions-sequence.html

Criado 18 de janeiro de 2011
Ultima resposta 20 de jan. de 2011
Respostas 12
Participantes 7