1.jsp实现分页查询
1.分页查询实现思路
下面进入代码:
ps:我用的三层架构做的
public interface StudentDao {
public int getCount();
public int getPages(int count,int size);
public List<Student> doPage(int pindex,int size);
}
在这里定义了三个方法,每个方法都有不一样的作用,比如第一个用来获取数量,第二用来计算总页码,第三个用来总分页查询,
ps:这的我定义的接口
public class StudentDaoimpl implements StudentDao{
//创建对象
PreparedStatement ps=null;
ResultSet res=null;
@Override
public int getCount() {
//定义数据总量
int count =0;
//创建sql
String sql="select count(1) from student";
//创建ps
try {
ps=BaseDao.getconn().prepareStatement(sql);
//执行sql
res=ps.executeQuery();
//直接获取数据
if(res.next()){
count=res.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
BaseDao.close(ps, res);
}
return count;
}
//计算总页数
@Override
public int getPages(int count, int size) {
//定义总页数
int zong=0;
//进行判断
if (count%size==0) {
zong=count/size;
} else {
zong=count/size+1;
}
return zong;
}
@Override
public List<Student> doPage(int pindex, int size) {
//创建集合
List<Student> list=new ArrayList<Student>();
//创建sql
String sql="select * from student limit ?,?";
//创建ps
try {
ps=BaseDao.getconn().prepareStatement(sql);
//替换占位符
ps.setObject(1, (pindex-1)*size);
ps.setObject(2, size);
//执行sql
res=ps.executeQuery();
//遍历res
while(res.next()){
//创建学生对象
Student stu=new Student(res.getInt(1),res.getString(2),
res.getString(3),res.getString(4),
res.getInt(5), res.getString(6), res.getString(7),
res.getDate(8), res.getString(9), res.getString(10));
//将数据存入集合
list.add(stu);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
BaseDao.close(ps, res);
}
return list;
}
}
这是我的数据访问层,大白话就是和数据库发生交互的
首先我什么我编写了一个接口然后这里编写的一个实现类去实现里面的方法,类似于后台,
//设置编码格式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//创建session
HttpSession session = request.getSession();
//创建业务逻辑层对象
StudentService ss=new StudentServiceimpl();
//定义每页显示的数量
int size=4;
//调用方法获取总数量
int count =ss.getCount();
//调用方法计算总页数
int zong=ss.getPages(count, size);
//在请求路径当中获取页面
String pindex=request.getParameter("pindex");
//做出判断
if(pindex==null){
pindex="1";
}
//进行类型转换
int index=Integer.parseInt(pindex);
//进行溢出处理
if(index<1){
index=1;
}
if(index>zong){
index=zong;
}
//调用实现分页方法
List<Student> list = ss.doPage(index, size);
//绑定数据传入index
session.setAttribute("list", list);
session.setAttribute("pindex", index);
session.setAttribute("zong", zong);
//跳转页面
response.sendRedirect("index.jsp");
}
中间省略一步业务逻辑层比较简单就不展示了,这是创建的是一个servlet充当一个服务器,注释写的比较详细,
<table border="1" cellspacing="0" width="400px">
<tr>
<td>学号</td>
<td>姓名</td>
<td>性别</td>
<td>出生日期</td>
</tr>
<c:forEach items="${list }" var="s">
<tr>
<td>${s.studentno }</td>
<td>${s.studentname }</td>
<td>${s.sex }</td>
<td>${s.borndate }</td>
</tr>
</c:forEach>
</table>
<a href="StudentServlet?pindex=1">首页</a>
<a href="StudentServlet?pindex=${pindex-1 }">上一页</a>
<a href="StudentServlet?pindex=${pindex+1 }">下一页</a>
<a href="StudentServlet?pindex=${zong }">尾页</a>
上面就是我的展示层,展示数据
接下来看效果图:
主要实现步骤:使用了JDBC,配备了数据源,jar包 核心标签库等。。。