the good old getObject() issue.. - Mailing list pgsql-jdbc

From Tore Halset
Subject the good old getObject() issue..
Date
Msg-id AF59A25B-E223-46CD-A627-93E3E42E6FC1@pvv.ntnu.no
Whole thread Raw
List pgsql-jdbc
Hello.

I have read all the stuff about this issue on this mail list and
think I understand the issue. However, I desperately want to be able
to get a oid blob with getObject()..

If I have control I do getInt(oidcolumn) if I want the oid value and
getBlob(oidcolumn) if I want a blob. Sometimes I do not have control
as some other product may use getObject and I am not able to switch
from oid to bytea.

I found a real hacky solution for this situation. It defaults to
getBlob and switch to getInt if getBlob throws a PSQLException. I
know this kind of mess could not go into the main source tree, but I
am posting it here for archiving..

In AbstractJdbc2ResultSet.getObject(int) before internalGetObject:
         // hack to handle getObject() on an oid with a blob
         if (field.getOID() == Oid.OID) {
             if (Driver.logDebug) {
                 Driver.debug("getObject of oid column. will try
getBlob first. column "
                         + field.getColumnLabel());
             }
             try {
                 return getBlob(columnIndex);
             } catch (PSQLException e) {
                 if (Driver.logDebug) {
                     String msg = "getObject(oid): getBlob failed.
fallback to getInt for column "
                             + field.getColumnLabel() + ". " +
e.getMessage();
                     Driver.debug(msg);
                 }
                 return getInt(columnIndex);
             }
         }

Possible improvements:
  * make the lob stuff throw a PSQLException subclass that this code
could use instead.
  * control this behaviour with a user settable jdbc driver parameter

  - Tore.

pgsql-jdbc by date:

Previous
From: Dave Cramer
Date:
Subject: Re: ResultSetMetaData.getTableName() == null
Next
From: "Do, Leon"
Date:
Subject: Bind message