Re: Jdbc4ResultSet getClob and getBlob are calling getLong internally

From: Nedim Cholich <nedim(at)cholich(dot)com>
To: Kris Jurka <books(at)ejurka(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Jdbc4ResultSet getClob and getBlob are calling getLong internally
Date: 2010-02-01 20:39:15
Message-ID: 2f8a6c901002011239r40e7cdd4k66321122e12829a6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

On Mon, Feb 1, 2010 at 15:15, Kris Jurka <books(at)ejurka(dot)com> wrote:
> On Mon, 1 Feb 2010, Nedim Cholich wrote:
>> After getting 'org.postgresql.util.PSQLException: Bad value for type
>> long' I found these two methods in Jdbc4ResultSet:
>>
>>   public java.sql.Clob getClob(int i) throws SQLException
>>   {
>>       return new Jdbc4Clob(connection, getLong(i));
>>   }
>>
>> Calling getLong here has to be wrong?
>>
>
> No.  Large Objects are not stored directly inline, but as a pointer to other
> storage.  The getLong is retrieving the external storage which Jdbc4Clob
> will then stream from the server on demand.  You are probably trying to call
> getClob on a text or varchar column and that's not going to work.  It might
> be nice to provide that interface, but there's no benefit (other than
> compatibility) to the user.  If you have text data stored inline, then it's
> already been transferred over to the client side in the ResultSet, so
> there's no point in using a streaming interface.

Yes, it's a TEXT column and yes I'm calling rs.getClob(columnName);

What am I suppose to call instead?

The above call produces:
... blah ...
Caused by: org.postgresql.util.PSQLException: Bad value for type long
: url=http://<removed>
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toLong(AbstractJdbc2ResultSet.java:2796)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong(AbstractJdbc2ResultSet.java:2019)
at org.postgresql.jdbc4.Jdbc4ResultSet.getClob(Jdbc4ResultSet.java:43)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getClob(AbstractJdbc2ResultSet.java:384)

getFixedString(columnIndex) method called from
AbstractJdbc2ResultSet:2019 is returning an actual column value
(String) which toLong is trying to convert to long and failing.

Thanks!

What am I missing?

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Kris Jurka 2010-02-01 20:42:06 Re: Jdbc4ResultSet getClob and getBlob are calling getLong internally
Previous Message Kris Jurka 2010-02-01 20:15:52 Re: Jdbc4ResultSet getClob and getBlob are calling getLong internally