Hibernate 源码分析之setFetchSize

JDBC的statement对象,有一个setFetchSize方法,参数是一个int值,其作用是,执行查询时,一次从服务器端拿多少行的数据到本地jdbc客户端这里来

还有一个方法:setMaxRows,这个方法,作用是JDBC最多返回多少行数据给调用者。举个例子:

一个表,有100行数据,sql语句为select * from table,fetchsize设置为20,maxrows设置为50,则:

数据库服务器端在执行这个查询的时候,会在内部维护一个游标(hander),调用者在执行resultset.next()的时候,JDBC会先与服务器端进行通信,取20条数据到jdbc的客户端中,然后返回第一条给调用者,当调用者取到第21条数据的时候,又会触发jdbc到数据库服务端拿数据,又拿20条,返回第21条给调用者。。。当调用者要拿第41条数据的时候,jdbc这时不是去数据库服务器端拿20条了,而是10条,因为maxrows为50,最多取50,之前已经取出40条了,所以只剩10条可取。

为什么要设置fetchsize?显然,这样设置,就避免了服务器一下子把所有结果都塞到客户端来了,将客户端的内存资源给撑爆掉了。比如:一行数据就是100M大小,如果JDBC一下子取50条,就需要5G的内存,而每次取10条,那么,就只需要1G内存就可以了,客户端的资源将变的可控!

上面解释了fetchsize参数的作用,下面说下我遇到的坑:</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值