您的位置:首页 > 数据库

用“SELECT TOP”语句优化分页显示数据库记录的类

2008-04-20 04:17 393 查看
前一阵写了篇“数据库记录分页显示的类 ”的文章,其中采用的是结果集指针定位的方法,但这个方法是需要每次都取出数据库中的所有记录,这对系统性能的浪费是巨大的。
因此,今天乘着有空写一个新的方法来对上次的类做个优化,该方法每次只从数据库中取出当前须显示页的记录,这将大大的缩短读取记录的时间,从而提高系统的总体性能。
下面是该类的代码:


import java.sql.*;


import java.util.*;






public class GetPage ...{


private int pageSize = 6; //每一页显示的记录数


private int pageCount = 1; //总的页数


private int currentPage = 1; //当前显示的页


//"showVar" 值为"-1"表示显示最后页,为"-2"表示显示上一页,为"-3"表示显示下一页,否则显示当前页。




public Vector<Vector> doGet(int showVar) ...{


Vector<Vector> all = new Vector<Vector> (); //当前页的记录集


Statement stmt = null;


ResultSet rs = null;


Connection con = null;






try ...{


Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //定义数据库驱动


String url =


"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=lesson"; //连接数据库"lesson"


String user = "sa"; //用户名


String password = "123"; //密码


con = DriverManager.getConnection(url, user, password); //连接


stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,


ResultSet.CONCUR_UPDATABLE);


String sql = "SELECT COUNT(*) FROM test"; //获取纪录总条数


rs = stmt.executeQuery(sql);


rs.next();


int allRows = rs.getInt(1);


pageCount = (allRows % pageSize == 0) ? (allRows / pageSize) :


(allRows / pageSize + 1);




if (pageCount == 0) ...{


pageCount = 1;


}




switch (showVar) ...{


case -1:


currentPage = pageCount;


break;


case -2:


currentPage = (currentPage > 1) ? (currentPage - 1) : 1;


break;


case -3:


currentPage = (currentPage < pageCount) ? (currentPage + 1) :


pageCount;


break;


default:




if (showVar > 0 && showVar <= pageCount) ...{


currentPage = showVar;


}


}


//****************从数据库中读取当前页的数据***********




if (currentPage == 1) ...{


sql = "SELECT TOP " + pageSize +


" * FROM test ORDER BY ID";


}




else ...{


sql = "SELECT TOP " + pageSize +


" * FROM test WHERE(ID >(SELECT MAX(id) FROM(SELECT TOP " +


pageSize * (currentPage - 1) +


" id FROM test ORDER BY id) AS T)) ORDER BY ID";


}


rs = stmt.executeQuery(sql);


//*************************************************


//****************获取当前页的数据*******************


Vector<Integer> id = new Vector<Integer> ();


Vector<String> zhuti = new Vector<String> ();




for (int i = 0; i < pageSize && rs.next(); i++) ...{


id.add(rs.getInt("id"));


zhuti.add(rs.getString("zhuti"));


}


all.add(id);


all.add(zhuti);


//*************************************************




}




catch (Exception ex) ...{


ex.printStackTrace();


}




finally ...{




if (rs != null) ...{




try ...{


rs.close();


}




catch (Exception e) ...{}


}




if (stmt != null) ...{




try ...{


stmt.close();


}




catch (Exception e) ...{}


}




if (con != null) ...{




try ...{


con.close();


}




catch (Exception e) ...{}


}


}




return all;


}






public int getPageCount() ...{


return pageCount;


}






public int getCurrentPage() ...{


return currentPage;


}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐