Pegando valor do auto-incremento após INSERT

13 respostas
R

Estou tentando retornar o valor de um campo autoInc após INSERT. Já tentei com getInt apos o execute do preparedStatement e com CallableStatement.
Alguma sugestão?

13 Respostas

T

http://java.sun.com/javase/6/docs/api/java/sql/Statement.html#getGeneratedKeys()

R

Tentei com esse tbm, recebo “Não suportado”
Banco: Oracle…
Tem alguma outra maneira?

T

http://forum.java.sun.com/thread.jspa?threadID=543710&messageID=2641454

R

Da uma olhadinha nesse meu outro post: http://www.guj.com.br/posts/list/80021.java
Nele eu explico melhor meu problema… Fiz outro post com outro nome, e nesse pelo menos vc viu! :lol:
Estava em outro micro, onde está o programa, ai ficou mais facil de colocar o exemplo.

[s]

K

Cara, se no seu caso você estiver usando Oracle e o objeto do auto-incremento for um Sequence, você pode conseguir o valor atual do objeto fazendo essa outra query:

SELECT <NOME_DA_SEQUENCE>.CURRVAL FROM DUAL

[]'s.

R

É Oracle sim!
Ainda não tinha usado isso…
Então faço logo após a instrução do SELECT…
Vou testar…

Valeu!

R

O problema é que quando seleciono do DUAL, ele já incrementa…
Consegui consultando da View All_Sequences …

Valeu…

P

o uso de uma sequence no Oracle é:

select seq_mat.nextval from dual ; – ultimo numero +1

select seq_mat.currval from dual; – busca o ultimo numero da sequence da conexão do seu usuário

muito utilizado pra transação onde varios usuários ao mesmo tempo utiliza um processo e não vai haver duplicação de numero.

abs

M

kaique:
Cara, se no seu caso você estiver usando Oracle e o objeto do auto-incremento for um Sequence, você pode conseguir o valor atual do objeto fazendo essa outra query:

SELECT <NOME_DA_SEQUENCE>.CURRVAL FROM DUAL

[]'s.

Tem so um probleminha, aconselho pegar o nextval e armazenar numa variável para retornar o valor pois e mais garantido
o currval poderia retornar o valor ja incrementado por outro usuário nesse meio tempo. o nextval vai garantir que este valor
seja so seu valeu…

M

long sequencia = retorno da select “select sequencia.nextval from dual”

insert into tabela(id,valorA)values(sequencia,valorA)

return sequencia.

M

Rafael Marques:
O problema é que quando seleciono do DUAL, ele já incrementa…
Consegui consultando da View All_Sequences …

Valeu…

sim raphael, e isso mesmo, isto vai garantir que ninguem mais vai pegar aquele numero
ja pensou nao possiblilidade de transações concorrentes???

M

O next val, ira te proteger da concorrência.

M

O nextval, ira te proteger da concorrência.

Criado 21 de janeiro de 2008
Ultima resposta 22 de jan. de 2008
Respostas 13
Participantes 5