Spring Stream ResultSet



Spring Stream ResultSet.

class StreamingStatementCreator implements PreparedStatementCreator {
private final String sql;

public StreamingStatementCreator(String sql) {
this.sql = sql;
}

@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
final PreparedStatement statement = connection.prepareStatement(sql,
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
statement.setFetchSize(Integer.MIN_VALUE);
return statement;
}
}

MySQL manual 中规定如果要使用stream result功能,创建statement时必须要满足以上3个条件,实现中也确识对这三个参数进行判断,从而影响
MysqlIO.java中getResultSet方法中L450-457的逻辑。
Statement中的代码
protected boolean createStreamingResultSet() {
return ((this.resultSetType == java.sql.ResultSet.TYPE_FORWARD_ONLY)
&& (this.resultSetConcurrency == java.sql.ResultSet.CONCUR_READ_ONLY)
&& (this.fetchSize == Integer.MIN_VALUE));
}

引用自 http://stackoverflow.com/questions/2095490/how-to-manage-a-large-dataset-using-spring-mysql-and-rowcallbackhandler