[
https://issues.apache.org/jira/browse/DERBY-6214?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13665534#comment-13665534
]
Mamta A. Satoor commented on DERBY-6214:
----------------------------------------
I think the unique number of 10923 characters comes from the following code in
the client side. Here we decide when to send the data as string vs stream
Thread [main] (Suspended (breakpoint at line 1366 in NetStatementRequest))
NetResultSetRequest(NetStatementRequest).computeProtocolTypesAndLengths(Object[],
ColumnMetaData, int[][], Hashtable) line: 1366
NetResultSetRequest(NetStatementRequest).buildSQLDTAcommandData(int,
ColumnMetaData, Object[]) line: 545
NetResultSetRequest(NetStatementRequest).writeExecute(NetPreparedStatement,
Section, ColumnMetaData, Object[], int, boolean, boolean) line: 162
NetPreparedStatement.writeExecute_(Section, ColumnMetaData, Object[],
int, boolean, boolean) line: 156
ClientPreparedStatement.writeExecute(Section, ColumnMetaData, Object[],
int, boolean, boolean) line: 1832
ClientPreparedStatement.flowExecute(int) line: 2047
ClientPreparedStatement.executeX() line: 1620
ClientPreparedStatement.execute() line: 1605
MamtaJDBC.main(String[]) line: 84
case Types.LONGVARCHAR:
// Is this the right thing to do // should this be 32700
s = (String) inputRow[i];
if (s == null || s.length() <= 32767 / 3) {
lidAndLengths[i][0] = DRDAConstants.DRDA_TYPE_NLONGMIX;
lidAndLengths[i][1] = 32767;
} else {
// Flow the data as CLOB data if the data too large to
for LONGVARCHAR
ByteArrayInputStream bais = null;
byte[] ba = null;
try {
ba = s.getBytes("UTF-8");
bais = new ByteArrayInputStream(ba);
ClientClob c = new ClientClob(
netAgent_, bais, "UTF-8", ba.length);
// inputRow[i] = c;
// Place the new Lob in the promototedParameter_
collection for
// NetStatementRequest use
promototedParameters_.put(i, c);
lidAndLengths[i][0] =
DRDAConstants.DRDA_TYPE_NLOBCMIXED;
lidAndLengths[i][1] =
buildPlaceholderLength(c.length());
} catch (UnsupportedEncodingException e) {
throw new SqlException(netAgent_.logWriter_,
new
ClientMessageId(SQLState.UNSUPPORTED_ENCODING),
"byte array", "Clob");
}
}
break;
> PreparedStatement.setObject(int, Object, Types.CLOB) fail with DerbyNet
> -----------------------------------------------------------------------
>
> Key: DERBY-6214
> URL: https://issues.apache.org/jira/browse/DERBY-6214
> Project: Derby
> Issue Type: Bug
> Affects Versions: 10.8.3.0, 10.9.1.0
> Reporter: Rong Qu
> Assignee: Mamta A. Satoor
> Attachments: Derby6214.java, Derby6214_setup.sql,
> Derby6214_ver2.java, derby.log, DerbyNet_client_test.sql
>
>
> The issue is specific to the DerbyNet client driver, and doesn't seem to
> occur using embedded Derby.
> "PreparedStatement.setObject(int, Object, Types.CLOB)". It seems to be a
> problem updating a CLOB column with a parameterized value using the DerbyNet
> client driver, and if the update SQL ends up updating more than one row. I
> attached a simple test case that just uses JDBC to reproduce the error. The
> exception looks like this:
> org.apache.derby.client.am.BatchUpdateException: Non-atomic batch failure.
> The batch was submitted, but at least one exception occurred on an individual
> member of the batch. Use getNextException() to retrieve the exceptions for
> specific batched elements.
> at org.apache.derby.client.am.Agent.endBatchedReadChain(Unknown Source)
> at
> org.apache.derby.client.am.PreparedStatement.executeBatchRequestX(Unknown
> Source)
> at org.apache.derby.client.am.PreparedStatement.executeBatchX(Unknown
> Source)
> at org.apache.derby.client.am.PreparedStatement.executeBatch(Unknown
> Source)
> ...
> Caused by: org.apache.derby.client.am.SqlException: Error for batch element
> #0: An unexpected exception was thrown
> at org.apache.derby.client.am.Statement.completeExecute(Unknown Source)
> at
> org.apache.derby.client.net.NetStatementReply.parseEXCSQLSTTreply(Unknown
> Source)
> at org.apache.derby.client.net.NetStatementReply.readExecute(Unknown
> Source)
> at org.apache.derby.client.net.StatementReply.readExecute(Unknown Source)
> at org.apache.derby.client.net.NetPreparedStatement.readExecute_(Unknown
> Source)
> at org.apache.derby.client.am.PreparedStatement.readExecute(Unknown
> Source)
> ... 4 more
> Caused by: org.apache.derby.client.am.SqlException: Error for batch element
> #0: Java exception: 'Stream has already been read and end-of-file reached and
> cannot be re-used.: java.io.EOFException'.
> at org.apache.derby.client.am.SqlException.<init>(Unknown Source)
> at org.apache.derby.client.am.SqlException.<init>(Unknown Source)
> ... 10 more
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira