Re: Problem with executeBatch and "A result was returned when none was expected"

From: Lew <noone(at)lewscanon(dot)com>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Problem with executeBatch and "A result was returned when none was expected"
Date: 2011-03-18 22:47:59
Message-ID: im0nee$n5q$1@news.albasani.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Oliver Jowett wrote:
> Sean Bowman wrote:
>> I've been trying to batch create a bunch of records using stored procedures and
>> the executeBatch() method (so I can get back the generated PKID's) with no luck. ...
>> When I try to call executeBatch, I get a BatchUpdateException with the message:
>> "A result was returned when none was expected".

This is the documented result when a statement tries to create a result set:
"Throws BatchUpdateException (a subclass of SQLException) if one of the
commands sent to the database fails to execute properly or attempts to return
a result set."

...

>> Any suggestions or pointing out my code flaws would be most appreciated. Or
>> does executeBatch just not work? I've been battling this issue most of the
>> day and I'm just about at my wits' end. Should I just give up and switch to
>> calling execute() one at a time? Seems far less efficient, but at least it
>> seems to work.
>
> You are correct, generated keys don't work with executeBatch() yet.
> (There was another thread about this a couple of days ago)

How would you retrieve the result if 'executeBatch()' did what you're asking?

There's nothing in the documentation for 'Statement#getGeneratedKeys()' that
indicates a need for a 'RETURNING' clause in the 'INSERT'.

As near as I can tell from the API docs, the behavior you experienced is
required. Postgres tells us about RETURNING that:
"If the INSERT command contains a RETURNING clause, the result will be similar
to that of a SELECT statement containing the columns and values defined in the
RETURNING list, computed over the row(s) inserted by the command."
http://www.postgresql.org/docs/9.0/interactive/sql-insert.html

A SELECT would return a 'ResultSet' through JDBC, thus the API requires your
statement to throw the exception that you got.

--
Lew
Honi soit qui mal y pense.

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Lew 2011-03-18 22:49:46 Re: Problem with executeBatch and "A result was returned when none was expected"
Previous Message Micka 2011-03-17 15:01:06 Re: [Postgis][javax.sql.DataSource] Failed