exception no PreparedStatement usando "insert .. returning id"  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
pgnt
Debugger
[Avatar]

Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline

Olás

Estou tendo uma SQLException do postgres ao executar um "PreparedStatement".
"Um resultado foi retornado quando nenhum era esperado"


A questão é que na query estou usando um recursos do postgres pra retornar a ID daquilo que estou inserindo


Ele deve estar retornandoo "id_paciente" para o PreparedStatement e por isso tá dando a exception.
Alguém já passou por isso ou tem alguma sugestão?

grato
abs

This message was edited 1 time. Last update was at 14/06/2008 00:34:06

plic_ploc
JavaChild

Membro desde: 11/06/2006 18:55:12
Mensagens: 137
Localização: Ibitinga - SP
Offline

e ai blz!!
você de mudar:

para:


Java MVC - Brutos framework
Faça o download de um WebChat feito usando o Brutos MVC
pgnt
Debugger
[Avatar]

Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline

Valeu mesmo, tava difícil encontrar!

Problema é que agora está dando outra exception:
Retorno de chaves geradas automaticamente não é suportado.

Em princípio considerei o retorno do ID, que tem como default configurado uma auto-sequencia, então troquei o valor do RETURNING por um valor fixo


Nada mudou (mesma exception), retirei o RETURNING e nada também...

Estou pesquisando o q pode ser, se por acaso souber ficarei duplamente agradecido.

abs

This message was edited 1 time. Last update was at 14/06/2008 09:45:18

aeciovc
Java Ninja

Membro desde: 28/02/2008 21:15:34
Mensagens: 267
Localização: Recife
Offline

cara, to passando pela mesma situação que você, tem uma luz ai??

uso Postgres, NetBeans 6.5


flw

Aécio Costa
www.aeciocosta.com.br
[WWW] [MSN]
pgnt
Debugger
[Avatar]

Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline

Putz, já faz um tempo... não consegui encontrar a solução na época e a solução foi tosca: realizei uma busca usando outra chave pra recuperar a ID (o caso foi diferente do exemplo citado).

Se vc econtrar a solução pra esse caso do postgres (alguma atualização do SGBD q venham a funcionar por ex), poste aí, por favor.

abs

fernandorochaworld
Smalltalk

Membro desde: 29/12/2008 16:54:07
Mensagens: 3
Offline

kara, pelo que eu vi o driver do POSTGRESQL não suporta
esse comando: PreparedStatement stt = conn.prepareStatement( qry, PreparedStatement.RETURN_GENERATED_KEYS );

A solução que eu encontrei para obter o dado da coluna auto incrementada foi:

String sql = "INSERT INTO X(nome) VALUES('B') RETURNING id";
PreparedStatement sqlInserir = con.prepareStatement(sql);
ResultSet rs = sqlInserir.executeQuery();
if ( rs.next() ){
obj.setCodigo( rs.getInt("id") );
}

This message was edited 1 time. Last update was at 29/12/2008 16:59:34

pgnt
Debugger
[Avatar]

Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline

valeu!

mas não deu certo...

como estou usando sequence (não sei, mas este pode ser o problema) resolvi o problema abrindo uma transação no banco dando um SELECT na sequencia

exemplificando, ficou tudo assim:



setando a conexao 'autocommit' como false e no final dando o 'commit' dos stts

abs
tralsl
Debugger
[Avatar]

Membro desde: 15/05/2008 14:53:28
Mensagens: 62
Offline

Olá eu tive o problema tbm

resolvi assim:

de:



para:



utilizo java 1.6
postgresql 8.3
jdbc 4 - 8.3-604
Linux Kernel 2.6.24-16-generic
e NetBeans 6.7.1 mas acho que não influencia muito

abraço

This message was edited 1 time. Last update was at 03/09/2009 15:56:04

[Email]
pgnt
Debugger
[Avatar]

Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline

blz,
não tenho como testar agora (estou em outro projeto, sem usar Postgre/Java), mas com certeza vou me lembrar desse post numa próxima
valeu!!!

This message was edited 1 time. Last update was at 03/09/2009 18:15:07

pgnt
Debugger
[Avatar]

Membro desde: 18/01/2007 04:27:33
Mensagens: 57
Offline

Olás, voltei para dizer o que rolou.

tralsl e fernandorochaworld , deu certo o esquema de vcs, valeu

Antes não estava funcionando pois estava usando a versão 8.1, ele não reconhecia RETURNING na sintaxe.
Agora usando o Postgres 8.4 rolou blz.

Fiz o esquema do tralsl, quando inseri conn.prepareStatement( qry, PreparedStatement.RETURN_GENERATED_KEYS ); como o fernandorochaworld colocou, não fez diferença (ele ficou retornando valor 1 apenas quando omiti o "Returning" da query, pode ser pelo fato de eu estar usando sequencias para autonumerar o id).

O que ficou estranho, é que na documentação (e o que se lê por aí) diz-se para usar executeUpdate para realizar alterações/inserções, e executeQuery apenas pra busca.

abs



dpainformatica
Entusiasta Java
[Avatar]

Membro desde: 13/01/2011 22:42:18
Mensagens: 21
Localização: Assis-SP
Offline

aê tralsl , perfect funciona q eh uma blz.


Daniel Paulo de Assis (Danyboy)
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team