db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Fernanda Pizzorno (JIRA)" <derby-...@db.apache.org>
Subject [jira] Created: (DERBY-1917) Clob.position fails with Embedded driver and large Clobs
Date Tue, 03 Oct 2006 11:52:19 GMT
Clob.position fails with Embedded driver and large Clobs
--------------------------------------------------------

                 Key: DERBY-1917
                 URL: http://issues.apache.org/jira/browse/DERBY-1917
             Project: Derby
          Issue Type: Bug
          Components: JDBC
            Reporter: Fernanda Pizzorno
            Priority: Minor


The method Clob.position(String searchstr, long start) fails when used on large lobs if the
searchstr is bigger than 256 characters. I have seen two different errors, if the search string
it bigger than 256 character it is not found and if the search string is bigger than 512 characters
an exception is thrown.


/* Repro */

            // Connect
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            Connection conn = DriverManager.getConnection("jdbc:derby:ReproClob;create=true",
"app", "app");
            
            // Create table and populate
            Statement stmt = conn.createStatement();
            try {
                stmt.executeUpdate("DROP TABLE tmpClob");
            } catch (SQLException se) {}
            stmt.executeUpdate("CREATE TABLE tmpClob (a int, b clob(40K))");
            
            PreparedStatement ps = conn.prepareStatement("INSERT INTO tmpClob VALUES (?, ?)");
            String tmp = "abcdefghijklmnopqrstuvxyz";
            StringBuilder sb = new StringBuilder();
            for (int i=0; i<1500; i++) {
                sb.append(tmp);
            }
            ps.setInt(1, 1);
            ps.setString(2, sb.toString());
            ps.executeUpdate();
            ps.close();

            ResultSet rs = stmt.executeQuery("SELECT * FROM tmpClob");
            if (rs.next()) {
                Clob c = rs.getClob(2);
                // Bug #1
                String subString1 = c.getSubString(100, 513);
                try {
                    long i1 = c.position(subString1, 90);
                    System.out.println("Found searched string at: " + i1);
                } catch (SQLException se) {
                    System.out.println("FAILURE REPRODUCED: Clob.position(string, int) throws
an exception when the length of the search string is bigger than 512");
                    se.printStackTrace();
                    while (se != null) {
                        System.out.println("FAIL: " + se.getMessage());
                        se = se.getNextException();
                    }
                }

                // Bug #2
                String subString2 = c.getSubString(100, 257);
                long i2 = c.position(subString2, 90);
                if (i2 == -1) {
                    System.out.println("FAILURE REPRODUCED: Clob.position(string, int) does
not find the search string if its length is bigger than 256");
                } else {
                    System.out.println("Found searched string at: " + i2);
                }
            }
            rs.close();
            stmt.close();
            conn.rollback();
            conn.close();


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message