Re: Memory exeception
От | Barry Lind |
---|---|
Тема | Re: Memory exeception |
Дата | |
Msg-id | 3BEAC8C7.1060306@xythos.com обсуждение исходный текст |
Ответ на | Memory exeception (Peter Wasem <peter.wasem@itag.ch>) |
Список | pgsql-jdbc |
Peter, You certainly can do this with java. I do in my code in many places. Consider the following example that processes all rows in the table 'bar' by fetching 10 rows at a time. thanks, --Barry PreparedStatement l_cursorstmt = connection.PrepareStatement("declare foo_cursor cursor for select foo from bar"); PreparedStatement l_fetchstmt = connection.PrepareStatement("fetch forward 10 from foo_cursor"); //open the cursor l_cursorstmt.execute(); ResultSet l_rset; int l_count; do { //continue looping until you get no rows returned in a fetch l_count = 0; //fetch rows from the cursor using the fetch statement l_rset = l_fetchstmt.executeQuery(); while (l_rset.next) { l_count++; //process the rows here } } while (l_count > 0); //don't forget to close the cursor PreparedStatement l_closestmt = connection.PrepareStatement("close foo_cursor"); l_closestmt.execute(); Peter Wasem wrote: > Hi Barry > > This is exactly what I observed. The physical memory dropped down to almost > zero (but no swap was used) before the exception was thrown. I'm not sure if I > can use cursors (other than ResultSet) since my application is Java-based. > > Thanks > > Barry Lind wrote: > > >>Peter, >> >>Postgres will return the entire result into memory first before >>processing the first row of data. If you don't want this behavior you >>should use explicit cursors and fetch statements to get data a few rows >>at a time. See the postgres documentation on the 'cursor' and 'fetch' >>sql statements. >> >>thanks, >>--Barry >> >>Peter Wasem wrote: >> >> >>>Hi >>> >>>I have a problem in processing large numbers of rows in ResultSets. >>>Here's the code fragment where the problem occurs: >>> >>>... >>> ResultSet rset = stmt.executeQuery( "select ... from ... where ... >>>order by ..." ) ; >>> while(rset.next() ) >>> { // Process the row } >>>... >>> >>>The query addresses some 100'000 rows. When stmt.executeQuery() is >>>executed suddenly an exception occurs. >>>The same program works fine with other JDBC drivers. >>> >>>Any ideas ? >>> >>>Greetings >>>Peter >>> >>>---------------------------(end of broadcast)--------------------------- >>>TIP 2: you can get off all lists at once with the unregister command >>> (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) >>> >>>
В списке pgsql-jdbc по дате отправления: