나는 수백만 개의 레코드가있는 테이블을 가지고 있습니다. 시스템을 더 빠르게 만들기 위해 자바 코드에서 페이지 매김 개념을 구현해야한다. 한 번에 1000 개의 레코드를 가져 와서 처리 한 다음 다른 1000 개의 레코드를 선택하고 처리해야합니다. 나는 이미 몇 가지 시도를했으며 그 중 누구도 일하지 않고있다. 쿼리는 나에게 결과를 제공하지만, 쿼리가 SELECT * from TABLENAME Where ROWNUM BETWEEN 10 and 20
을 때, 그것은 빈 결과 집합을 반환 SELECT * from TABLENAME Where ROWNUM BETWEEN 0 and 10
때, 위의 예에서Java에서 페이지 매김
1) String query = "select * from TABLENAME" + " WHERE ROWNUM BETWEEN %d AND %d";
sql = String.format(query, firstrow, firstrow + rowcount);
- 내가 노력 것들 중 일부는 다음과 같습니다. 심지어 DB에서 실행하려고했는데 빈 결과 집합을 반환하려고했습니다. 이유는 확실하지 않습니다.
2) preparedStatement.setFetchSize(100);
Java 코드에서이 코드를 가져 왔지만 여전히 테이블의 모든 레코드를 가져옵니다. 이 문장을 추가하는 것은 어쨌든 내 코드에 영향을주지 않습니다.
도와주세요!
왜? 왜 그냥 'ResultSet'을 반복하지 않고 데이터베이스 커서로 작업을하게할까요? –
'setFetchSize'는 드라이버가 다음 _ (fetchSize) _'resultSet.next()'호출을 위해 한 번에 요청할 행의 수만 지정합니다. 그것은 여전히 당신에게 모든 행을 제공합니다. 대신에'setMaxRows'를 찾고있을 것입니다. –
백만 건 이상의 레코드를 가져 오려고하면 "Out of Memory"가됩니다. – user3845894