https://bz.apache.org/bugzilla/show_bug.cgi?id=60099

            Bug ID: 60099
           Summary: StatementCache does not check the scrollable type of
                    result set when searching for a cached statement
           Product: Tomcat Modules
           Version: unspecified
          Hardware: PC
            Status: NEW
          Severity: major
          Priority: P2
         Component: jdbc-pool
          Assignee: dev@tomcat.apache.org
          Reporter: mabba...@gmail.com

Created attachment 34224
  --> https://bz.apache.org/bugzilla/attachment.cgi?id=34224&action=edit
Test class

When the StatementCache is searching for a matching PreparedStatement, the
matching criteria do not take into account the scrollable type of result set,
but only the sql query.

If we create a PreparedStatement with a FORWARD_ONLY result set type, and then
we try to create another PreparedStatement with a SCROLL_INSENSITIVE type with
the same query, then the cache will return the PreparedStatement created
first(a FORWARD_ONLY statement), and any attempt to call the absolute method
will throw a java.sql.SQLException: The 'absolute()' method is only allowed on
scroll cursors.

Please find attached a Test Class that can help to reproduce the problem. To
run this class you need to add derby-10.11, tomcat-jdbc-8.0.37 and
tomcat-juli-8.0.37 to classpath. I am using jdk1.8.0_92 to compile and execute
this test.

P.S. The error only appears when creating a PreparedStatement instead of a
Statement (by calling createStatement()).

Please tell me, if you need more informations.

Thanks for your help!

Full StackTrace:
Exception in thread "main" java.sql.SQLException: The 'absolute()' method is
only allowed on scroll cursors.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown
Source)
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown
Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedResultSet.checkScrollCursor(Unknown
Source)
    at org.apache.derby.impl.jdbc.EmbedResultSet.absolute(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at
org.apache.tomcat.jdbc.pool.interceptor.StatementDecoratorInterceptor$ResultSetProxy.invoke(StatementDecoratorInterceptor.java:307)
    at com.sun.proxy.$Proxy4.absolute(Unknown Source)
    at test.Test.testWithInsensitiveResultSet(Test.java:75)
    at test.Test.main(Test.java:18)
Caused by: ERROR XJ061: The 'absolute()' method is only allowed on scroll
cursors.
    at org.apache.derby.iapi.error.StandardException.newException(Unknown
Source)
    at
org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown
Source)
    ... 14 more

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to