首先所谓的优化SQL 是说 要多少数据就查多少数据,你一页只显示10条数据那么我就只查询10条数据。如果用MS-SQL: String sql = "select top " + size + " * from news where newsID not in ( select top " + length + " newsID from news order by newsID desc ) order by newsID desc"; 这是MS-SQL的排除法,最简单的是MYSQL: select * from tableName limit startindex , size;startindex 是重第几页开始,一般是 (当前页 - 1) * 每页要显示多少条数据。 size 是每页要显示多少条数据。
即时查询出你所要的信息:
eg
/**
* 实现新闻的分页查询
* @param size 每页显示的大小
* @param currentPage 当前的页码
* @return 新闻列表
*/
public List <News> findNewsByCondition(int size, int currentPage) {
int length=0;
if(currentPage>1){
length = size ;
}else{
length = size * (currentPage-1);
} String sql = "select top "
+ size
+ " * from news where newsID not in ( select top "
+ length
+ " newsID from news order by newsID desc ) order by newsID desc";
List <News> items = new ArrayList <News>();
Result rs = SqlHelper.getRs(sql);
if (rs != null && rs.getRowCount() > 0) {
for (int i = 0; i < rs.getRowCount(); i++) {
Map map = rs.getRows()[i];
items.add(get(map));
} }
return items; }
不仅外观漂亮,也很实用,但效率问题,我就没有具体测试过了。。
(提供一种方法。。)
我用到是oracle10g 用hibernate做啊
String sql = "select top "
+ size
+ " * from news where newsID not in ( select top "
+ length
+ " newsID from news order by newsID desc ) order by newsID desc";
这是MS-SQL的排除法,最简单的是MYSQL:
select * from tableName limit startindex , size;startindex 是重第几页开始,一般是 (当前页 - 1) * 每页要显示多少条数据。
size 是每页要显示多少条数据。