Let me ask it this way:
How can we configure driver so it doesn't fetch all records at one time.
for example 100 records per each fetch, So the application server doesn't get OutOfMemoryException.
Thank you.
>> hi guys,
>>
>> I have a very large table, which I should scan it and generate reports. My code is like this:
>>
>> Class.forName("nl.cwi.monetdb.jdbc.MonetDriver");
>> Connection conn = DriverManager.getConnection("jdbc:monetdb://localhost/online", "monetdb", "monetdb");
>>
>> conn.setAutoCommit(false);
>> conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
>>
>> Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
>> stmt.setFetchSize(10);
>>
>> ResultSet rs = stmt.executeQuery("SELECT * FROM denorm");
>>
>> while (rs.next()) {
>> /* process line */
>> }
>>
>> conn.commit();
>>
>> I do not use much ram inside while loop. I get OutOfMemeryException from JVM.
>> So I think the driver ignores HOLD_CURSORS_OVER_COMMIT and fetches all records. Is there any solution?
> HOLD_CURSORS_OVER_COMMIT means it keeps the cursor open, right? So what
> else can the driver do but keep them open (including the memory
> associated to that)? What would you have expected to happen with this
> setting?