Проблема:Ограничения MySQL JDBC
я получаю большой ResultSet из БД (MySQL) (более 1 000 000 строк) и обрабатывать каждую строку около 40 секунд. Сводка, я работаю с ResultSet более 30 минут, я получаю меньше записей, чем действительно содержаться в таблице базы данных, и не имеет ошибок и никаких ограничений. Если я подсчитываю количество строк этого ResultSet, все в порядке (количество ResultSet = количество БД).
Есть ли некоторые ограничения на mysql-сервер или драйвер mysql jdbc или что-то еще?
Мой код. она работает в весеннем рамках:
public void query(String query, RowCallbackHandler rowCallbackHandler) throws SQLException {
ResultSet rs = null;
ResultSet rsCount = null;
Statement stmt = null;
Statement stmtCount = null;
try {
stmt = createStatmant();
rs = stmt.executeQuery(query);
if (rs == null) {
log.info("result set is null");
}
stmtCount = createStatmant();
rsCount = stmtCount.executeQuery(query);
int i = 0;
while(rsCount.next()){
i++;
}
log.info("ResultSet size : "+i);
int j = 0;
rs.next();
do{
j++;
rowCallbackHandler.processRow(rs);
}while (rs.next());
log.info("ResultSet size real : "+i);
log.info("ResultSet size fact : "+j);
} catch (SQLException e) {
throw new RuntimeException(e.getMessage());
}finally{
if(stmt!=null){
stmt.close();
}
if(rs!=null){
rs.close();
}
if(rsCount!=null){
rsCount.close();
}
}
}
createStatment:
private Statement createStatmant() throws SQLException {
((BasicDataSource)dataSource).setTimeBetweenEvictionRunsMillis(1000*60*60);
Statement stmt = dataSource.getConnection().createStatement(
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(fetchSize);
stmt.setMaxRows(50000000-1);
return stmt;
}
DataSource является глобальная переменная в классе:
private javax.sql.DataSource dataSource;
Вставьте свой код, пожалуйста, так легко определить проблему. –
Это похоже на проблему в вашем коде. –