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?