Re: 8.0 + JDBC3 Driver

From: Kris Jurka <books(at)ejurka(dot)com>
To: Dave Held <dave(dot)held(at)arraysg(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: 8.0 + JDBC3 Driver
Date: 2005-08-09 22:21:32
Message-ID: Pine.BSO.4.56.0508091712540.28527@leary.csoft.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

On Tue, 9 Aug 2005, Dave Held wrote:

> First, I have an oddity with the 8.0-310.jdbc3 driver. When I
> query the db, I have to explicity specify the ResultSet type and
> concurrency if I want something other than a FORWARD_ONLY
> ResultSet. This was not necessary in 7.4. How do I tell when a
> table will return a FORWARD_ONLY ResultSet by default?

The javadoc for Connection.prepareStatement says "Result sets created
using the returned PreparedStatement object will by default be type
TYPE_FORWARD_ONLY and have a concurrency level of CONCUR_READ_ONLY."

http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Connection.html#prepareStatement(java.lang.String)

The 7.4 driver didn't correctly enforce this and let you scroll a forward
only result, but this has been fixed in 8.0.

> Second, I'm having a problem with a query, which I will get to
> in a second. However, I notice from the stack trace that calls
> are being made into the jdbc2 portion of the driver, even though
> I am using the JDBC3 Jar with JDK 1.5. Is this normal, or is there
> something wrong?

This is expected. The JDBC 2 + 3 drivers share source code, so a JDBC 3
build is mostly just a JDBC 2 build plus some extra stuff.

> Third, this is my actual problem:
>
> INSERT INTO my_table
> (my_fields, ...)
> VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
> ;
> SELECT currval('my_schema.my_seq')
> ;
>
> I do a prepareStatement() with the above query, I fill in the params,
> and I call executeQuery() hoping to get a ResultSet. However,
> instead I get:
>
> PSQLException: No results were returned by the query.
>

What the driver does is split this query into two pieces and issues them
separately. This returns two results from the server, an update count and
the SELECT result. You should use PreparedStatement.execute() and then
getMoreResults and then getResultSet to navigate to the second part of the
query results.

Kris Jurka

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Thomas Dudziak 2005-08-09 22:37:38 Re: Missing functionality in ResultSetMetaData ?
Previous Message Kris Jurka 2005-08-09 22:05:18 Re: Missing functionality in ResultSetMetaData ?