Re: Jdbc4ResultSet getClob and getBlob are calling getLong internally

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

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.

Kris Jurka

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Nedim Cholich 2010-02-01 20:39:15 Re: Jdbc4ResultSet getClob and getBlob are calling getLong internally
Previous Message Nedim Cholich 2010-02-01 18:53:37 Jdbc4ResultSet getClob and getBlob are calling getLong internally