在使用DbStream支持sql查询时,可以通过增加与数据库服务器交互次数,减少客户端内存膨胀问题,其底层使用PreparedStatement setFetchSize,适用于大量数据导出的场景。示例代码如下:
DbStream queryStream = new DbStream();
queryStream.open("select * from test_table", 200); //一次读取200条记录,默认值5000
queryStream.execute();
while (queryStream.next()) {
//获取行记录,返回一个Map
Map<String, Object> rowDataMap = queryStream.getRowData();
System.out.println(rowDataMap);
}
该段代码在不同数据库中,表现存在差异;
Oracle数据库
Oracle数据库表现符合预期,无需特殊处理。
GuassDB高斯数据库
高斯数据库需要开启事务才能支持流式获取。
MySQL数据库
mysql数据库需要在jdbc url上增加useCursorFetch=true
H2数据库内存版
不支持流式获取,也不会造成内存膨胀