[ 
https://issues.apache.org/jira/browse/DERBY-4224?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen updated DERBY-4224:
--------------------------------------

         Component/s: Network Client
          Derby Info: [Regression]
    Derby Categories: [Embedded/Client difference]  (was: [Regression Test 
Failure])
             Summary: Commit after setAsciiStream() makes execution fail with 
the client driver  (was: Got SQLException)

Updating the summary with a more accurate description of the problem.

Also flagging this as an embedded/client difference, since the example program 
appears to work fine with the embedded driver.

> Commit after setAsciiStream() makes execution fail with the client driver
> -------------------------------------------------------------------------
>
>                 Key: DERBY-4224
>                 URL: https://issues.apache.org/jira/browse/DERBY-4224
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC, Network Client
>    Affects Versions: 10.4.2.0
>            Reporter: Simon Meng
>
> Got below error message when running a JDBC prolgram with derby. I use Apache 
> Derby Network Server - 10.4.2.0 - (689064). The same program works fine with 
> another version Apache Derby Network Server - 10.2.2.0 - (485682). It looks 
> like there is a regression between the two versions.
> Exception in thread "main" java.sql.SQLException: You cannot invoke other 
> java.sql.Clob/java.sql.Blob methods after calling the free() method or after 
> the Blob/Clob's transaction has been committed or rolled back.
>       at 
> org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown 
> Source)
>       at org.apache.derby.client.am.SqlException.getSQLException(Unknown 
> Source)
>       at org.apache.derby.client.am.Lob.checkValidity(Unknown Source)
>       at org.apache.derby.client.am.Clob.length(Unknown Source)
>       at 
> org.apache.derby.client.net.NetStatementRequest.computeProtocolTypesAndLengths(Unknown
>  Source)
>       at 
> org.apache.derby.client.net.NetStatementRequest.buildSQLDTAcommandData(Unknown
>  Source)
>       at org.apache.derby.client.net.NetStatementRequest.writeExecute(Unknown 
> Source)
>       at 
> org.apache.derby.client.net.NetPreparedStatement.writeExecute_(Unknown Source)
>       at org.apache.derby.client.am.PreparedStatement.writeExecute(Unknown 
> Source)
>       at org.apache.derby.client.am.PreparedStatement.flowExecute(Unknown 
> Source)
>       at org.apache.derby.client.am.PreparedStatement.executeX(Unknown Source)
>       at org.apache.derby.client.am.PreparedStatement.execute(Unknown Source)
>       at DerbyTest.test(DerbyTest.java:36)
>       at DerbyTest.main(DerbyTest.java:12)
> Caused by: org.apache.derby.client.am.SqlException: You cannot invoke other 
> java.sql.Clob/java.sql.Blob methods after calling the free() method or after 
> the Blob/Clob's transaction has been committed or rolled back.
>       ... 12 more
> Below is the test program I used.
> import java.io.ByteArrayInputStream;
> import java.io.IOException;
> import java.io.InputStream;
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.PreparedStatement;
> import java.sql.SQLException;
> import java.sql.Statement;
> public class DerbyTest {
>     public static void main(String[] args) throws SQLException, IOException {
>         new DerbyTest().test();
>     }
>     private void test() throws SQLException, IOException {
>         Connection conn = null;
>         try {
>             conn = getConnection();
>             Statement stmt = conn.createStatement();
>             dropTable("test1");
>             dropTable("test2");
>             String createStr1 = "CREATE TABLE test1 (col0 VARCHAR(8000))";
>             String createStr2 = "CREATE TABLE test2 (col0 VARCHAR(8000))";
>             stmt.executeUpdate(createStr1);
>             stmt.executeUpdate(createStr2);
>             stmt.close();
>             
>             PreparedStatement pstmt1 = conn.prepareStatement("INSERT INTO 
> test1 VALUES (?)");
>             PreparedStatement pstmt2 = conn.prepareStatement("INSERT INTO 
> test1 VALUES (?)");
>             InputStream in1 = new 
> ByteArrayInputStream("abcdefghijklmnopqrstuvwxyz0123456789".getBytes());
>             InputStream in2 = new 
> ByteArrayInputStream("9876543210ZYXWVUTSRQPONMLKJIHGFEDCBA".getBytes());
>             pstmt1.setAsciiStream(1, in1, in1.available());
>             pstmt2.setAsciiStream(1, in2, in2.available());
>             pstmt1.execute();
>             pstmt2.execute();
>             pstmt1.close();
>             pstmt2.close();
>             System.out.println("Successful");
>         } finally {
>             if (conn != null)
>                 conn.close();
>         }
>     }
>     private Connection getDriverConnection() throws SQLException {
>         String connectionURL = 
> "jdbc:derby://localhost:1527/testdb;user=app;password=derby;create=true";
>         return DriverManager.getConnection(connectionURL);
>     }
>     private Connection getConnection() throws SQLException {
>         return getDriverConnection();
>     }
>     public void dropTable(String tableName) throws SQLException {
>               Connection conn = getConnection();
>               Statement stmt = conn.createStatement();
>               try {
>                       stmt.executeUpdate("DROP TABLE " + tableName);
>               } catch (SQLException sqle) {
>                       System.out.println("Error occured when drop table: " + 
> sqle.getMessage());
>               } finally {
>                       if (stmt != null) {
>                               stmt.close();
>                       }
>                       if (conn != null) {
>                               conn.close();
>                       }
>               }
>       }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to