PostgreSQL - INSERT RETURNING ID [RESOLVIDO]

Java

09/04/2009

Olás Estou tendo uma SQLException do postgres ao executar um "PreparedStatement". [i][b]"Um resultado foi retornado quando nenhum era esperado"[/b][/i] A questão é que na query estou usando um dos recursos do postgres pra retornar a ID daquilo que estou inserindo
String 	qry = " INSERT INTO tb_pessoa(nome,ddd,fone, etc...) VALUES (?,?,?, etc...) RETURNING id_paciente ";

PreparedStatement 	stt 	= conn.prepareStatement(qry);

Ele deve estar retornando o "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
Paulo

Paulo

Curtidas 0

Melhor post

Paulo

Paulo

29/07/2010

Outro esquema que funcionou usando "executeUpdate()" (v 8.4.1):
PrepareStatement sta = conn.prepareStatement("INSERT INTO...", Statement.RETURN_GENERATED_KEYS);

sta.executeUpdate();

ResultSet rsID = sta.getGeneratedKeys();

if(rsID.next())
  int id = rsID.getInt("id");
Não precisa de acrescer "RETURNING id" na query. abs
GOSTEI 1

Mais Respostas

João Santos

João Santos

09/04/2009

??? Tem como postar a exception pra gente? JL
GOSTEI 0
Paulo

Paulo

09/04/2009

não retorna muita coisa..
org.postgresql.util.PSQLException: Retorno de chaves geradas automaticamente não é suportado.
abs
GOSTEI 0
Thiago Silva

Thiago Silva

09/04/2009

Olá eu tive o problema tbm resolvi assim: de:
 PreparedStatement ps = con.prepareStatement("insert into sistema.base " +
                "(nome,  permissao) " +
                "values (?,?) returning id;");

ps.setString(1, base.getNome());
ps.setString(2, base.getPermissao());

 int linhasAfetadas = ps.executeUpdate();
para:
 PreparedStatement ps = con.prepareStatement("insert into sistema.base " +
                "(nome,  permissao) " +
                "values (?,?) returning id;");

ps.setString(1, base.getNome());
ps.setString(2, base.getPermissao());

ResultSet rs = ps.[b]executeQuery()[/b];

if(rs.next())
         int id = rs.getInt("id");

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
GOSTEI 0
Paulo

Paulo

09/04/2009

Valeu tralsl :) 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. abs
GOSTEI 0
Diogo Souza

Diogo Souza

09/04/2009

Isso é que é uma dúvida persistente!!! :D
GOSTEI 0
Thiago Silva

Thiago Silva

09/04/2009

:mrgreen: o importante é que a dúvida foi resolvida, a propósito, a versão 8.2 tbm possui suporte ao returning
GOSTEI 0
POSTAR