The problem is that PreparedStatement.setBytes() only writes Large
Objects. It should do something like ResultSet.getBytes(), which
checks the column meta-data to see if the column holds an OID or
not, then do the right thing based on that.
Bill <bouma@cplane.com>
-------------------------------------------------
.../postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/PreparedStatement.java
/** * Set a parameter to a Java array of bytes. The driver converts this * to a SQL VARBINARY or LONGVARBINARY
(dependingon the argument's * size relative to the driver's limits on VARBINARYs) when it sends * it to the database.
* * <p>Implementation note: * <br>With org.postgresql, this creates a large object, and stores the * objects oid in
thiscolumn. * * @param parameterIndex the first parameter is 1... * @param x the parameter value * @exception
SQLExceptionif a database access error occurs */ public void setBytes(int parameterIndex, byte x[]) throws
SQLException{ LargeObjectManager lom = connection.getLargeObjectAPI(); int oid = lom.create(); LargeObject lob =
lom.open(oid); lob.write(x); lob.close(); setInt(parameterIndex,oid); }