GBase 8a
其他
文章

JDBC常用特性-流式读取

发表于2024-05-10 16:11:23266次浏览0个评论

为什么要使用流式读取:

在我们使用JDBC驱动从数据库获取数据的时候,一般情况下,进行一次查询,结果集是一次性从集群获取的,并存放在JDBC所在应用的内存中,这种情况如果查询的结果集比较大,将会导致应用内存增长速度陡增,影响别的内存操作,甚至是内存溢出,这种情况下,要么考虑增大应用内存,要么就需要开启JDBC的流式读取方式。

 

什么是流式读取

流式读取方式可以通过数据流的方式,逐条从集群获取数据,将数据获取到JDBC应用所在内存中,从而减小大结果集对应用内存的影响。

 

 

当出现以上问题时,应当先从业务角度分析,是否真实需要将很大的结果集查询出来并放到内存中,建议先优化应用,不建议用户开启流式读取,当开启流式读取时集群会生成一个临时表,占用临时表空间,频繁使用对集群有影响;另外如果必须开启流式读取,就必须将结果集内的数据消费完,集群才会认为读取任务结束。

代码示例如下:

 

streamStmt = Conn.createStatement(

  java.sql.ResultSet.TYPE_FORWARD_ONLY,

  java.sql.ResultSet.CONCUR_READ_ONLY);

 

streamStmt.setFetchSize(Integer.MIN_VALUE); // -2147483648 必须是固定值

 

while (rs.next()) { // 必须遍历完所有结果集

  rs.getString(1);

}

评论

登录后才可以发表评论