Fórum PostgreSQL - INSERT RETURNING ID [RESOLVIDO] #569757

09/04/2009

0

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
1
2
3
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

Responder

Post mais votado

29/07/2010

Outro esquema que funcionou usando "executeUpdate()" (v 8.4.1):
1
2
3
4
5
6
7
8
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

Paulo

Paulo
Responder

Gostei + 1

Mais Posts

09/04/2009

João Santos

??? Tem como postar a exception pra gente? JL
Responder

Gostei + 0

09/04/2009

Paulo

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

Gostei + 0

03/09/2009

Thiago Silva

Olá eu tive o problema tbm resolvi assim: de:
1
2
3
4
5
6
7
8
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:
1
2
3
4
5
6
7
8
9
10
11
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
Responder

Gostei + 0

12/07/2010

Paulo

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
Responder

Gostei + 0

12/07/2010

Diogo Souza

Isso é que é uma dúvida persistente!!! :D
Responder

Gostei + 0

12/07/2010

Thiago Silva

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

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar