Firebird: Pegando o ID gerado via insert ... returning  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

Qual é o jeito certo de pegar o ID gerado pelo fireburn quando eu faço um:


Devo usar um CallableStatement?

Devo colocar o meu insert entre call { ... } ?

Devo usar o registerOutParameter ?

This message was edited 1 time. Last update was at 29/09/2011 19:17:56


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
mauricioadl
GUJ Master
[Avatar]

Membro desde: 10/05/2007 14:52:21
Mensagens: 1140
Offline



no mysql funciona assim

Seu problema foi resolvido? Por favor, edite seu primeiro post e adicione [RESOLVIDO] no título.
O forum agradece.
[Email] [MSN]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

mauricioadl wrote:

no mysql funciona assim



No MySQL vc pode usar o last_insert_id() que te dá isso de mão beijada.

O driver JDBC do Firebird não suporta getGeneratedKeys(), acredite se quiser. :-|

This message was edited 1 time. Last update was at 29/09/2011 19:55:14


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
mauricioadl
GUJ Master
[Avatar]

Membro desde: 10/05/2007 14:52:21
Mensagens: 1140
Offline

bom, vamos por partes.

firebird eh um lixo! se possivel saia dele o mais rapido possivel, vai por mim!

se vc nao puder sair dele, use store procedures, ou algum framework orm.

ou se nao, use o velho e bom select max(id).

Seu problema foi resolvido? Por favor, edite seu primeiro post e adicione [RESOLVIDO] no título.
O forum agradece.
[Email] [MSN]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

mauricioadl wrote:
firebird eh um lixo! se possivel saia dele o mais rapido possivel, vai por mim!

Só uso mysql. Isso aí é para fazer o MentaBean suportar Firebird.


se vc nao puder sair dele, use store procedures, ou algum framework orm.

Só queria saber qual é o jeito certo de chamar o tal do "insert ... returning" via CallableStatement. Se tem que colocar entre "call { }", chamar o registerOutParameter, etc.


ou se nao, use o velho e bom select max(id).


Isso é muito tosco. Só funciona se locar a tabela inteira enquanto estiver fazendo o select max(id).

Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
mauricioadl
GUJ Master
[Avatar]

Membro desde: 10/05/2007 14:52:21
Mensagens: 1140
Offline

entao, o callablestatement eh pra store procedures. se vc der insert ele nao vai funcionar

dae vc pode dar um register parameter que da certo.

Seu problema foi resolvido? Por favor, edite seu primeiro post e adicione [RESOLVIDO] no título.
O forum agradece.
[Email] [MSN]
romarcio
JWizard
[Avatar]

Membro desde: 17/12/2008 10:05:49
Mensagens: 2434
Localização: Santa Maria/RS
Offline

Da uma olhada aqui: http://www.firebirdsql.org/refdocs/langrefupd21-insert.html


Segundo esta discução: http://comments.gmane.org/gmane.comp.db.firebase.portuguese/70972
o returning está disponivel a partir da versão 2.0 do firebird.

This message was edited 1 time. Last update was at 29/09/2011 20:39:04


Bacharel em Sistemas de Informação.
Oracle Certified Professional, Java SE 6 Programmer

Blog | Facebook | Twitter
[WWW]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

romarcio wrote:Da uma olhada aqui: http://www.firebirdsql.org/refdocs/langrefupd21-insert.html


Segundo esta discução: http://comments.gmane.org/gmane.comp.db.firebase.portuguese/70972
o returning está disponivel a partir da versão 2.0 do firebird.


Valeu pela ajuda, mas ainda estou vendido no lance. Eu entendi como o returning funciona, mas não tenho firebird aqui (tô no mac) para testar. Eu precisaria saber direitinho como fazer a chamada JDBC para pegá-lo. Tenho que usar call { insert ... returning id } para fazer o insert com returning? Tenho que usar prepareOutParameter no callablestatement? Alguém que tem o firebird e efetivamente fez isso teria que me responder.

Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
Jose111
JavaGuru
[Avatar]

Membro desde: 06/04/2009 13:20:32
Mensagens: 211
Localização: Depois do System.exit(0);
Offline



Firebird era um lixo nas versões anteriores da 2.1.

vocedeviaestarprogramando
[MSN]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

Jose111 wrote:

Firebird era um lixo nas versões anteriores da 2.1.


Vamos lá José. Me explica isso direitinho, pois agora fiquei curioso.

1 - Pelo que entendi não precisa fazer cast nenhum para FirebirdPreparedStatement. Isso seria muito ruim, pois a função do JDBC é justamente te deixar independente de qualquer API proprietária do banco-de-dados. Pra isso que cada database fornece o seu database driver.

2 - Vc executa um INSERT com prepared statement e executeQuery? Geralmente se faz isso com executeUpdate, mas aí vc não tem result set para pegar o seu código. Se funcionar beleza, mas confirma isso pra mim, please.

Vc me explicando isso vou fazer o mentabean suportar isso de forma transparente, ou seja, vc apenas faz session.insert(street) e a chave primária (codigo) da rua vai pra dentro do objeto street automaticamente. Ele faz tudo isso pra vc por trás dos panos, do mesmo jeito que ele faz para MySQL. Só que no mysql ele insere e depois faz um select last_insert_id() para pegar o id gerado e injetar no objeto.

This message was edited 2 times. Last update was at 30/09/2011 06:42:59


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
Jose111
JavaGuru
[Avatar]

Membro desde: 06/04/2009 13:20:32
Mensagens: 211
Localização: Depois do System.exit(0);
Offline

1-
É o cast não precisa...

2-
Isso mesmo! O comando insert te retorna um resultado, então você pode executar com executeQuery que ele retorna um ResulSet com o que você colocou no returning.

Quanto a ultima parte de jogar o código de chave primaria no objeto é somente você fazer um rs.next() e pegar o valor do campo depois...

vocedeviaestarprogramando
[MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team