日期:2014-05-16  浏览次数:20369 次

jsp中的分页问题
     jsp中的分页是比较基础的问题,也是一个比较重要的问题,下面写我自己的一点的看法:
     首先贴一段分页的代码(这是我写的,不唯一,且要使用的话需要修改一些东西):
     // 实现分页功能
int pageSize = 5;
int pageNow = 1;
int pageCount = 0;
int rowCount = 0;
String pagenow = req.getParameter("pagenow");
if (pagenow != null) {
pageNow = Integer.parseInt(pagenow);
}
String page = req.getParameter("page");
if (page != null) {
pageNow = Integer.parseInt(page);
}
Class.forName(
"com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
// 得到连接
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=aixinshizhe";
String user = "sa";
String password = "sa";
conn = DriverManager.getConnection(url, user, password);
// 创建statement
String sql = "select count(*) from users";
ps = conn.prepareStatement(sql);
// 注意在写sql语句时不要忘写*,不要忘记写'
rs = ps.executeQuery();
if (rs.next()) {
rowCount = rs.getInt(1);
// pw.println(rowCount);
if (rowCount % pageSize == 0) {
pageCount = rowCount / pageSize;
} else {
pageCount = rowCount / pageSize + 1;
}
}
// pw.println(pageCount);
ps = conn.prepareStatement("select top "+ pageSize+ "* from users where userId not in(select top "+ pageSize * (pageNow - 1)+ " userId from users )");
// 给问号赋值
// ps.setInt(1,pageSize);
// ps.setInt(2,pageSize*(pageNow-1));
rs = ps.executeQuery();
pw.println("<body><center>");
pw.println("<table border=1>");
pw.println("<tr><th>userId</th><th>username</th><th>passwd</th><th>email</th><th>grade</th><th>删除</th><th>修改</th></tr>");
while (rs.next()) {
pw.println("<tr>");
pw.println("<td>" + rs.getInt(1) + "</td>");
pw.println("<td>" + rs.getString(2) + "</td>");
pw.println("<td>" + rs.getString(3) + "</td>");
pw.println("<td>" + rs.getString(4) + "</td>");
pw.println("<td>" + rs.getInt(5) + "</td>");
pw.println("<td><a href=>删除</a></td>");
pw.println("<td><a href=>修改</a></td>");
pw.println("</tr>");
}
pw.println("</table>");
pw.println("<a href=welcome?pagenow=1>首页</a>");
if (pageNow != 1) {
pw.println("<a href=welcome?pagenow=" + (pageNow - 1)+ ">上一页</a>");
}
// 按规定显示页码连接
int control = 0;
if (pageNow + 6 <= pageCount) {
control = pageNow + 6;
} else {
control = pageCount;
}
for (int i = pageNow; i <= control; i++) {
pw.println("<a href=welcome?pagenow=" + i + ">" + i+ "</a>");
}
if (pageNow != pageCount) {
pw.println("<a href=welcome?pagenow=" + (pageNow + 1)
+ ">下一页</a>");
}
pw.println("<a href=welcome?pagenow=" + pageCount
+ ">尾页</a><br>");
pw.println("<form action=welcome method=post>");
pw.println("跳转到:<input type=text name=page>");
pw.println("<input type=submit value=确定>");
pw.println("</form>");
pw.println("</center></body>");

}



我认为分页可以分为四部分,
首先,分别是确定pageSize,pageCount,pageNow,rowCount这四个变量,rowCount是从数据库中得到的,pageSize是根据自己指定的,pageNow是在跳转到哪一页时指定的,而pageCount是通过pageSize和rowCount计算出来的,
其次,从数据库中按照pageSize的大小读取数据(读出pageSize条数据)
再有,就是将读出的数据显示在表格中,
最后,加入页数的超链接,



注意:createStatement与prepareStatement的区别
2011-06-28 21:29
prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。  
  createStatement不会初始化,没有预处理,没次都是从0开始执行SQL


Statement   ─   由方法   createStatement   所创建。Statement