一、分页算法:首先定义四个变量
int pageSize:每页显示多少条记录
int pageNow:希望显示第几页
int pageCount:一共有多少页
int rowCount:一共有多少条记录
说明:pageCount是计算出来的
(1)算法1
// 计算pageCount
if (rowCount % pageSize == 0) {
pageCount = rowCount / pageSize;
} else {
pageCount = rowCount / pageSize + 1;
}
(2)算法2
pageCount = (rowCount + pageSize - 1) / pageSize;
二、使用mysql数据库做分页操作
(1)增加表的记录,实现快速复制sql语句:
insert into 表名 (字段1,字段2…) select 字段1,字段2… from 表名
(2)核心代码:
// -----------分页查询功能------------
int pageSize = 5;// 每页显示几条
int pageNow = 1;// 当前页
int rowCount = 0;// 共有多少条数据
int pageCount = 0;// 共有几页数据
String courrentPage = req.getParameter("pageNow");
if (courrentPage != null) {
pageNow = Integer.parseInt(courrentPage);
}
Connection conn = null;
PreparedStatement stmt = null;
ResultSet resultSet = null;
// 加载数据库驱动
try {
Class.forName("com.mysql.jdbc.Driver");
// 获取数据库连接
String url = "jdbc:mysql://localhost:3306/student";
String user = "root";
String password = "tianyejun6";
conn = DriverManager.getConnection(url, user, password);
String sql = "select count(*) from users";
stmt = (PreparedStatement) conn.prepareStatement(sql);
resultSet = stmt.executeQuery();
if (resultSet.next()) {
rowCount = resultSet.getInt(1);
}
// 计算pageCount
if (rowCount % pageSize == 0) {
pageCount = rowCount / pageSize;
} else {
pageCount = rowCount / pageSize + 1;
}
pageCount = (rowCount + pageSize - 1) / pageSize;
// 执行查询语句
String sqlSearch = "select * from users where userId limit ?,?";
stmt = (PreparedStatement) conn.prepareStatement(sqlSearch);
// 给?赋值
stmt.setInt(1, (pageNow - 1) * pageSize);
stmt.setInt(2, pageSize);
resultSet = stmt.executeQuery();
writer.println(
"<table border='1'><tr><th>id</th><th>userName</th><th>password</th><th>email</th><th>grade</th></tr>");
while (resultSet.next()) {
writer.println("<tr>");
writer.println("<td>" + resultSet.getInt(1) + "</td>");
writer.println("<td>" + resultSet.getString(2) + "</td>");
writer.println("<td>" + resultSet.getString(3) + "</td>");
writer.println("<td>" + resultSet.getString(4) + "</td>");
writer.println("<td>" + resultSet.getString(5) + "</td>");
writer.println("</tr>");
}
writer.println("</table>");
// 显示上一页
if (pageNow > 1) {
writer.print("<a href=Wel?pageNow=" + (pageNow - 1) + "> 上一页 </a>");
}
// 显示超链接
for (int i = pageNow; i <= pageNow + pageSize - 1; i++) {
writer.print("<a href=Wel?pageNow=" + i + "> " + i + " </a>");
}
// 显示下一页
if (pageNow > 1 && (pageNow + 1) <= pageCount) {
writer.print("<a href=Wel?pageNow=" + (pageNow + 1) + "> 下一页 </a>");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:
mysql分页查询语句:
select * from 表名 where 列名 limit ?,?
效果图:
(1)界面和业务逻辑未分离,源码下载地址:http://download.youkuaiyun.com/detail/tianyejun6/9726582
(2)界面和业务逻辑使用MVC设计模式分离,源码下载地址:http://download.youkuaiyun.com/detail/tianyejun6/9727045
启动tomcat服务器首次访问地址:http://localhost:8080/test/Login