You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Kristian Waagan (JIRA)" <ji...@apache.org> on 2011/08/16 14:09:27 UTC
[jira] [Updated] (DERBY-5183) Cannot get BLOB value in the result
set
[ https://issues.apache.org/jira/browse/DERBY-5183?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kristian Waagan updated DERBY-5183:
-----------------------------------
Affects Version/s: 10.3.3.0
10.4.1.3
Fix Version/s: 10.4.2.0
I downloaded the BIRT sample database and ran the second repro program.
This bug appears only in versions 10.3.3.0 and 10.4.1.3.
> Cannot get BLOB value in the result set
> ---------------------------------------
>
> Key: DERBY-5183
> URL: https://issues.apache.org/jira/browse/DERBY-5183
> Project: Derby
> Issue Type: Bug
> Components: JDBC
> Affects Versions: 10.3.3.0, 10.4.1.3
> Reporter: dingyan
> Fix For: 10.4.2.0
>
>
> There is a table include BLOB and CLOB data,column 3 is CLOB and column 4 is BLOB
> when i try to get the data from this table,in some cases,SQLException is thrown :The data in this BLOB or CLOB is no longer available. The BLOB/CLOB's transaction may be committed, or its connection is closed
> when i get the CLOB and BLOB data without the stream read,it is ok,my test source code as below:
> import java.io.InputStream;
> import java.sql.Clob;
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.ResultSetMetaData;
> import java.sql.SQLException;
> public class Test {
> public static String driverClass = "org.apache.derby.jdbc.EmbeddedDriver";
> public static String driverURL = "jdbc:derby:d:\\BirtSample";
> public static String user = "ClassicModels";
> public static String squery = "select * from CLASSICMODELS.PRODUCTLINES,CLASSICMODELS.PRODUCTS where CLASSICMODELS.PRODUCTS.PRODUCTLINE = CLASSICMODELS.PRODUCTLINES.PRODUCTLINE";
> private static int i = 0;
> public static void main( String[] args )
> {
>
> try {
> Class.forName(driverClass);
> Connection c = DriverManager.getConnection(driverURL, user, "");
> PreparedStatement s = c.prepareStatement(squery);
> c.setAutoCommit(false);
> ResultSet r = s.executeQuery();
> ResultSetMetaData meta = r.getMetaData();
> int count = meta.getColumnCount();
> try{
> while(r.next()) {
> r.getString(1);
> r.getString(2);
> Clob clob = r.getClob(3);
> // byte[] b = new byte[(int)clob.length()];
> // InputStream stream = clob.getAsciiStream();
> // stream.read(b);
> // stream.close();
> // Reader reader = clob.getCharacterStream();
> // reader.read(b);
> // reader.close();
> System.out.println( r.getBlob(4));
>
> System.out.println( "row count=" + i);
> i++;
> }}catch( SQLException ex)
> {
> ex.printStackTrace();
> }
> s.close();
> }
> catch(Exception e)
> {
> e.printStackTrace();
> }
>
> }
> }
> but when i read after get the CLOB,source code as below:
> import java.io.InputStream;
> import java.sql.Clob;
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.ResultSetMetaData;
> import java.sql.SQLException;
> public class Test {
> public static String driverClass = "org.apache.derby.jdbc.EmbeddedDriver";
> public static String driverURL = "jdbc:derby:d:\\BirtSample";
> public static String user = "ClassicModels";
> public static String squery = "select * from CLASSICMODELS.PRODUCTLINES,CLASSICMODELS.PRODUCTS where CLASSICMODELS.PRODUCTS.PRODUCTLINE = CLASSICMODELS.PRODUCTLINES.PRODUCTLINE";
> private static int i = 0;
> public static void main( String[] args )
> {
>
> try {
> Class.forName(driverClass);
> Connection c = DriverManager.getConnection(driverURL, user, "");
> PreparedStatement s = c.prepareStatement(squery);
> c.setAutoCommit(false);
> ResultSet r = s.executeQuery();
> ResultSetMetaData meta = r.getMetaData();
> int count = meta.getColumnCount();
> try{
> while(r.next()) {
> r.getString(1);
> r.getString(2);
> Clob clob = r.getClob(3);
> byte[] b = new byte[(int)clob.length()];
> InputStream stream = clob.getAsciiStream();
> stream.read(b);
> stream.close();
> // Reader reader = clob.getCharacterStream();
> // reader.read(b);
> // reader.close();
> System.out.println( r.getBlob(4));
>
> System.out.println( "row count=" + i);
> i++;
> }}catch( SQLException ex)
> {
> ex.printStackTrace();
> }
> s.close();
> }
> catch(Exception e)
> {
> e.printStackTrace();
> }
>
> }
> }
> the SQLException is thrown when get the row 89,error info as below:
> ...
> org.apache.derby.impl.jdbc.EmbedBlob@a9255c
> row count=89
> java.sql.SQLException: The data in this BLOB or CLOB is no longer available. The BLOB/CLOB's transaction may be committed, or its connection is closed.
> at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
> at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
> at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
> at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
> at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
> at org.apache.derby.impl.jdbc.EmbedResultSet.getBlob(Unknown Source)
> at Test.main(Test.java:42)
> Caused by: java.sql.SQLException: The data in this BLOB or CLOB is no longer available. The BLOB/CLOB's transaction may be committed, or its connection is closed.
> at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
> at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
> ... 8 more
> Caused by: ERROR XJ073: The data in this BLOB or CLOB is no longer available. The BLOB/CLOB's transaction may be committed, or its connection is closed.
> at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
> at org.apache.derby.impl.jdbc.EmbedBlob.<init>(Unknown Source)
> ... 2 more
> when i try to this test on oracle ,this problem will not happen,so i think maybe this is a bug of Derby
> your help will be highly apperaciated
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira