본문 바로가기
MySql

MySQL Spring MySQL 및 RowCallbackHandler를 사용하여 대규모 데이터 세트를 관리하는 방법

by 베이스 공부 2020. 12. 14.
반응형

Spring과 JdbcTemplate을 사용하여 MySQL에서 테이블의 각 행을 살펴 보려고합니다. 내가 착각하지 않았다면 다음과 같이 간단해야합니다.

JdbcTemplate template = new JdbcTemplate(datasource);
template.setFetchSize(1);
// template.setFetchSize(Integer.MIN_VALUE) does not work either            
template.query("SELECT * FROM cdr", new RowCallbackHandler() {
  public void processRow(ResultSet rs) throws SQLException {
    System.out.println(rs.getString("src"));
  }
});

전체를 읽으려고하기 때문에 OutOfMemoryError가 발생합니다. 어떤 아이디어?

 

해결 방법

 


데이터베이스에서 가져와야하는 행 수에 대한 힌트 를 JDBC 드라이버에 제공


이 기능을 사용하려면 다음과 같은 방식으로 Statement 인스턴스를 만들어야합니다.

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

문서의 전체 섹션을 읽으십시오.이 방법의주의 사항도 설명되어 있습니다.

그러나 Spring에서 작동하도록하려면 사용자 정의 구현으로 JdbcTemplate을 확장 / 오버라이드해야합니다. 내가 Spring을하지 않기 때문에 이것에 대해 자세히 설명 할 수는 없지만 이제는 적어도 어디를보아야하는지 알고 있습니다.

행운을 빕니다.

 

참조 페이지 https://stackoverflow.com/questions/2095490

 

 

반응형

댓글