我想求出结果集的记录数,哪个方法好?
我按hql语句已经查询得到了结果集,存在了List<News> newsList里。
方法1:利用SELECT COUNT(*)...方法可以得到记录数;
方法2:newsList.size()方法值和方法1的值相等。
如果我想进行分页的话,需要用到记录数,请问用哪个方法好?
------解决方案-------------------- 方法1
------解决方案-------------------- 已经查询到LIST里了 当然就用方法2了
------解决方案-------------------- 学习!
------解决方案-------------------- 分页的话,方法二只能得到这一页的记录数,但是方法一却是满足查询条件的所有记录数。
------解决方案-------------------- 当然是方法1。因为你在分页的过程中,根本就不用先查询出所有,那样效率很底(在数据很多的情况下),所有要使用sql语句查询一共有多少条数据速度要快,
------解决方案-------------------- 都不好
你的好象是查出来放到缓存再分
这样效率高些每页显示多少每次就查多少
hibernate有分页机制
Query query = session.createQuery("from table");
query.setFirstResult(1);
query.setMaxResults(10);
------解决方案-------------------- 还用问么!带分页就需要显示。不显示INFO就第一种了。
list 里面只不过是一个size 字段而已,咔嚓就查出来。
------解决方案-------------------- 探讨 当然是方法1。因为你在分页的过程中,根本就不用先查询出所有,那样效率很底(在数据很多的情况下),所有要使用sql语句查询一共有多少条数据速度要快,
------解决方案-------------------- 一般用到第二个。
为什么,因为第一个用的话,总是从数据库中去取,增加了访问频率,降低了程序的运行效率。
第二种,你可以将查询到得结果,可以放到作用域中如request,session中
当下次在用的时候,就到作用域中直接去取就可以了,就不要在访问数据库了,
即使没有查到数据,list.size()都不会报
空指针异常 ,只会为0。
------解决方案-------------------- CREATE PROCEDURE proc_Page
@first INT, --开始数据(例如:从某页第一条数据)
@second INT --结束数据(例如:从某页最后一条数据)
AS
SELECT * FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY RID) as accp,* FROM bbsReply) AS APTECH
WHERE accp BETWEEN @first AND @second
GO
分页存储过程
新函数么就的用
------解决方案-------------------- 分页的话二个都要用到,
一个是结果集
一个是记录总数(求总页数总要吧)
如果只要分页
不管怎么说
方法一要比方法二好
因为结果集小速度快
------解决方案-------------------- 一次性查出来了,使用方法2比较好
方法1还要查一次,影响速率
------解决方案-------------------- 方法2
------解决方案-------------------- 如果想进行分页的话,那newsList.size()得到的只是当页的记录条数啊,获取全部的还是用count(*)吧
------解决方案-------------------- 肯定是方法1
不能用方法2,如果数据量大的时候,用方法2把结果集转成LIST会造成JVM
内存溢出