EBIHARA, Yuichiro wrote on 22.06.2007 08:34:
Thomas,
Thank you for your comment.
I found that using getBinaryStream(), setBinaryStream(),
getCharacterStream()
and setCharacterStream() to handle LOBs across different DBMS
is much more
portable (and reliably) than using the Clob()/Blob() methods.
According to JDBC 3.0 specifiction, those 4 methods may not be compatible to BLOB/CLOB.
Some databases may support them to access LOB data but not all databases.
Hmm. At least for updating LOBs, "my method" should be "legal".
This is a quote from jdbc-3_0-fr-spec.pdf
"The setBinaryStream and setObject methods may also be used to set a Blob
object as a parameter in a PreparedStatement object. The setAsciiStream,
setCharacterStream, and setObject methods are alternate means of setting a
Clob object as a parameter."
But I have to admit that I never read the specs in detail until now. Those
methods were simply working fine (and were the only reliable way to handle LOBs
with the Oracle drivers).
Btw: these methods are working (for me) with Oracle, SQL Server (jTDS and MS
Driver), DB2 (8.x), Firebird, Derby, MySQL, HSQL, H2, Informix and Sybase
Adaptive Server Anywhere.
But I do think that the exception thrown when using getClob() or getBlob() is an
error in the JDBC driver. Maybe we should file an issue for this.
Regards
Thomas