Re: ResultSet Column Name Problem in pgjdbc2.jar?

From: Dave Cramer <Dave(at)micro-automation(dot)net>
To: Mike Abraham <mike(at)firehosesoftware(dot)com>
Cc: "pgsql-jdbc(at)postgresql(dot)org" <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: ResultSet Column Name Problem in pgjdbc2.jar?
Date: 2002-10-04 13:12:44
Message-ID: 1033737164.11650.46.camel@inspiron.cramers
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Mike

There is a workaround which is portable,

select users.id, users.class as usersclass, items.class as itemsclass...

Dave
On Wed, 2002-10-02 at 19:10, Mike Abraham wrote:
> I've searched the archives for help on this, but come up empty. My
> apologies if this problem has already been addressed.
>
> In a nutshell, my problem is this: A resultset returned from a query
> containing table & column names (as opposed to column names alone)
> contains only the column names (rather than table & column names).
>
> Here's a simplified version of the code that's giving me a problem:
>
> ...
>
> ResultSet rs = stmt.executeQuery(
> "select users.id, users.class, items.class " +
> "from users " +
> "left join items on (users.id = items.id)");
>
> while (rs.next()) {
> System.out.println(
> rs.getInt("users.user_id") + " | " +
> rs.getInt("users.class") + " | " +
> rs.getInt("items.class"));
> }
>
> ...
>
> You get the picture. I'm joining on the 'id' column of tables 'users'
> and 'items' in order to return the values in their respective 'class'
> fields.
>
> This works like a dream in MySQL, both via the admin query tool, as well
> as my java code. It works with the pgAdmin query tool, but my java code
> gives the following error:
>
> "The column name transactions.transaction_id not found.
> at org.postgresql.jdbc2.ResultSet.findColumn(ResultSet.java:821)
> at org.postgresql.jdbc2.ResultSet.getInt(ResultSet.java:574)"
>
> Here's why. The query passes through to the database just fine, the
> ResultSet that's returned, however, only has the column names, without
> the table prefixes, in its Fields collection.
>
> In other words, taking a look at the Fields collection in the debugger
> shows 3 fields: Fields(0) = "user_id", Fields(1) = "class", Fields(2) =
> "class".
>
> Running against the MySQL JDBC driver gives the proper result, including
> the table prefixes: Fields(0) = "users.user_id", Fields(1) =
> "users.class", Fields(2) = "items.class".
>
> So, in order to use the PostgreSQL driver, you gotta reference all
> columns in a ResultSet by column number, not name. This is not a huge
> problem, of course, but I thought I should make you aware of it.
>
> Thanks for your attention.
>
> Mike Abraham
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
>
>

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Dave Cramer 2002-10-04 13:13:11 Re: limiting rows in an query
Previous Message Felipe Schnack 2002-10-04 13:06:19 Re: limiting rows in an query