I took a quick look at the code, and there is interleaving of resultset
and statements in autocommit mode. Can you try with autocommit off.
I think if readTable1 is called, a commit will be issued for the first
statement in readRows., and then calling getBlob in readRows will
throw the error since the transaction in which the blob was created is
already committed. Also note, the reason you dont hit this error for
small blob's, is because small blobs are materialized in memory.
Section 10.1 of the JDBC 3.0 spec says
Enabling autocommit, causes the jdbc driver to do a transaction commit
after each individual sql statement as soon as it is complete. the
point at which it is complete depends on type of statement. for select
statement :- statement is complete when resultset is closed and result
set is closed* as soon as one* of the following happens
-- all rows have been retrieved
-- associated statement object is re-executed
-- another Statement object is executed on the same connection
api for blob says
"A |Blob| object is valid for the duration of the transaction in which
is was created. "
So is it right to say derby behavior is ok here ?
Thanks,
Sunitha.