[
https://issues.apache.org/jira/browse/DERBY-4830?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12917600#action_12917600
]
Kristian Waagan commented on DERBY-4830:
----------------------------------------
I think I understand what's going on.
Here's the code with the issue:
callback.acceptDocumentContent(documentid, dv,
rs.getCharacterStream(1), /*
* rs.getClob(1).getCharacterStream()
* ,
*/
rs.getBinaryStream(3));
Consulting the Java API documentation for for instance
ResultSet.getCharacterStream(), note the following excerpt:
"Note: All the data in the returned stream must be read prior to getting the
value of any other column. The next call to a getter method implicitly closes
the stream."
So, when rs.getBinaryStream(3) is executed, the stream returned by
rs.getCharacterStream(1) is implicitly closed.
This doesn't happen if you use rs.getClob(1).getCharacterStream(), because a
[BC]lob object will survive until the transaction is committed/aborted (in the
case of auto-commit, until rs.next() I think).
My take on this is that it is not a Derby bug, but rather a consequence of the
JDBC specification.
I guess you have several options to solve this (with different pros/cons):
o pass the ResultSet and the corresponding column indexes to the
acceptDocumentContent method
o pass a Clob/Blob to the acceptDocumentContent method
o use the current "work-around", passing streams obtained from the [BC]lob
objects
I plan to resolve this issue as invalid. Please let me know if you agree with
my analysis.
> ResultSet.getCharacterStream returns closed stream for clob
> -----------------------------------------------------------
>
> Key: DERBY-4830
> URL: https://issues.apache.org/jira/browse/DERBY-4830
> Project: Derby
> Issue Type: Bug
> Components: JDBC
> Affects Versions: 10.6.1.0
> Reporter: Benson Margulies
> Priority: Minor
> Attachments: derby-4830.tar.gz
>
>
> After selecting a clob, the following works:
> {code}
> rs.getClob(1).getCharacterStream()
> {code}
> However, simply calling
> {code}
> rs.getCharacterStream(1)
> {code}
> returns a closed StringReader.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.