日期:2014-05-20  浏览次数:20665 次

我想求出结果集的记录数,哪个方法好?
我按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内存溢出