The ojdbc7-12.1.0.2.0 support TYPE_SCROLL_INSENSITIVE. I already made the
test by calling only the second method who creates a Statement with a
SCROLL_INSENSITIVE type, and it worked.

Regards,

2016-09-08 11:29 GMT+02:00 Terence M. Bandoian <tere...@tmbsw.com>:

> On 9/8/2016 3:20 AM, Mohamad Abbas wrote:
>
>> Hello,
>>
>> I am working on a legacy web application running on a tomcat 8.0.37, and i
>> am getting an error "Invalid operation for forward only resultset:
>> absolute" when trying to use an InsensitiveScrollableResultSet (to
>> paginate
>> results).
>>
>> To make it simple and reproduce the problem i've created a test project
>> who
>> contains the "Main" class below. The test project is executed on on a
>> windows 7, using jdk1.8.0_92. The only jars are present in the classpath
>> of
>> the project are: tomcat-jdbc(8.0.37), tomcat-juli(8.8.37),
>> and ojdbc7-12.1.0.2.0.
>>
>> Those are the steps to reproduce the problem:
>>
>>     - Create a Statement using the method .prepareStatement(String)=> OK
>>     - Execute the query => OK (simple query: SELECT 1 FROM dual)
>>     - Create a new Statement (with a SCROLL_INSENSITIVE type) for the same
>>     query (SELECT 1 FROM dual) => KO (or OK?), tomcat-jdbc is returning
>> the
>>     cached Statement created in Step 1 (a FORWARD_ONLY Statement).
>>     - Execute the query => OK
>>     - Call absolute method => Exception: Invalid operation for forward
>> only
>>
>>     resultset: absolute
>>
>> I don't know if it is really a bug in tomcat-jdbc or if my problem is due
>> to a misconfiguration.
>>
>> Here is the code:
>>
>> package test;
>>
>> import java.sql.Connection;
>> import java.sql.PreparedStatement;
>> import java.sql.ResultSet;
>>
>> import org.apache.tomcat.jdbc.pool.DataSource;
>> import org.apache.tomcat.jdbc.pool.PoolProperties;
>>
>> public class Main {
>>
>>      private static DataSource datasource;
>>
>>      static {
>>          PoolProperties p = new PoolProperties();
>>          p.setUrl("jdbc:oracle:thin:@localhost:1531:test");
>>          p.setDriverClassName("oracle.jdbc.OracleDriver");
>>          p.setUsername("test");
>>          p.setPassword("test");
>>          p.setTestWhileIdle(true);
>>          p.setTestOnBorrow(false);
>>          p.setValidationQuery("SELECT 1 FROM dual");
>>          p.setValidationInterval(30000);
>>          p.setMaxActive(1); // to simplify the test
>>          p.setInitialSize(1); // to simplify the test
>>          p.setMaxWait(1); // to simplify the test
>>          p.setMinEvictableIdleTimeMillis(30000);
>>          p.setMinIdle(1); // to simplify the test
>>          p.setMaxIdle(1); // to simplify the test
>>          p.setJdbcInterceptors("StatementCache(max=10)"); // If i
>> replace max=10 by max = 0, the problem disappears
>>          datasource = new DataSource();
>>          datasource.setPoolProperties(p);
>>      }
>>
>>      public static void main(String[] args) throws Exception {
>>          testWithForwardOnlyResultSet(datasource);
>>          testWithInsensitiveResultSet(datasource);
>>      }
>>
>>      private static void testWithForwardOnlyResultSet(DataSource
>> datasource)
>> throws Exception {
>>          Connection con = datasource.getConnection();
>>          PreparedStatement st = con.prepareStatement("select 1 from
>> dual");
>>          ResultSet rs = st.executeQuery();
>>          while (rs.next()) {
>>              System.out.println("Result = " + rs.getString(1));
>>          }
>>          rs.close();
>>          st.close();
>>          con.close();
>>      }
>>
>>      private static void testWithInsensitiveResultSet(DataSource
>> datasource)
>> throws Exception {
>>          Connection con = datasource.getConnection();
>>          PreparedStatement st = con.prepareStatement("select 1 from dual",
>> ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
>>          ResultSet rs = st.executeQuery();
>>          rs.absolute(1);
>>          while (rs.next()) {
>>              System.out.println("Result = " + rs.getString(1));
>>          }
>>          rs.close();
>>          st.close();
>>          con.close();
>>      }
>>
>> }
>>
>> Please tell me, if you need more informations.
>>
>> Thanks for your help!
>>
>
>
> If a JDBC driver does not support TYPE_SCROLL_INSENSITIVE, it may fall
> back silently to TYPE_FORWARD_ONLY.
>
> -Terence Bandoian
>  http://www.tmbsw.com/
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to