整理了一宿,终于找到了头绪,在头脑还算清醒时,整理下分页的笔记.
我这个分页用的是Oracle的数据库.他在查询时涉及到了一个伪列. table名为
employees.
创建bean对象employee.属性如下:
private int employee_id;
private String first_name;
private String email;
private String phone_number;
private String job_id;
生成getXXX和setXXX方法
创建Page类,用来保存数据对象
private int totalRecords;//数据的总记录
private int totalPage;//总页数
private int pageRecords=7;每页显示记录数,即每页显示7条
private int startIndex;//每页数据在数据库中的起始位置
private int endWith;//每页数据在数据库中的结束位置
private List list;//存储emoloyee对象
生成getXXX和setXXX方法
构造方法
public Page (int totalRecords,int pagenum){
pagenum=(totalRecords+pageRecords-1)/pageRecords;//获取总页数
startIndex=pageRecords*(pagenum-1);//获取每页数据在数据库中的起始位置
endWith=startIndex+pageRecords-1;//数据在数据库中的结束位置
}
创建类EmployeeDao 此类获取数据库中的数据 包括数据库的连接(dbcp数据库连接池)
public class EmployeeDao{
-------------
获取连接池
private static DataSource datasource=null;
static{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null
try{
Properties prop=new Properties();
InputStream
in=EmployeeDao.class.getClassLoader().getRecourceAsStream
("dbcpconfig.properties");
prop.load(in);
BasicDataSourceFactory
factory=new BasicDataSourceFactory();
datasource=factory.createDataSource(prop);
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭连接 简写
conn.close();
ps.close();
rs.close();
}
注: dbcpconfig.properties文件中驱动加载.
driverClassName=oracle.jdbc.driver.OralceDriver
uri=jdbc:oracle:thin:@localhost:1521:orcl(注:orcl是安装Oracle时给予的全局数据库名)
username=登录数据库用户名
password=登录数据库密码
-----------------------
//获取数据库中的数据
public Int getTotalRecords(){
Connection conn=null;
try{
conn=datasource.getConnection();
String sql="select count(*) from
employees";
ps=conn.preparedStatement(sql);
rs=ps.executeQuery();
if(rs.next()){
return
rs.getInt(1);
}else{
return -1;
}
}catch(Exection e){
e.printStackTrace();
}
return 0;
}
}
--------------------
//获取数据封装到employee对象中
public List getEmployeeBypagenum(int totalRecords,int
pagenum){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
List list=new ArrayList();
String sql="select * from (select rownum
rr,employee_id,first_name,email,phone_number,job_id from employees
) e where e.rr between ? and ?)";
try {
conn=datasource.getConnection();
ps=conn.prepareStatement(sql);
ps.setInt(1,
startindex);
ps.setInt(2,
startindex+7-1);
rs=ps.executeQuery();
List list=new
ArrayList();
while(rs.next()){ employee
em=new employee();
em.setEmployee_id(rs.getInt(1));
em.setFirst_name(rs.getString(2));
em.setEmail(rs.getString(3));
em.setPhoneNumber(rs.getString(4));
em.setJob_id(rs.getString(5));
list.add(em);
}
return
list;
} catch (SQLException e)
{
// TODO
Auto-generated catch block
e.printStackTrace();
}finally{
relase(conn,ps,rs);//我自己写的关闭数据库连接的方法
}
}
}
----------------------------
servlet中对数据的处理
doget()方法中
int
pagenum=1;//第一次访问时pagenum定义是1
String
pagenu=request.getParameter("pagenum");
if(pagenu!=null){//不为null即返回第几页
int pagenum=Integer.parInt(pagenu);
EmployeeDao employeedao=new EmployeeDao();
int
totalRecords employeedao.getTotalRecords();//获取总记录数据
employee employe=new employee();
Page page=new Page(totalRecords,pagenum);//获取当页数据封装到page中
List
list=employeedap.getEmloyeeBypage(page.getStartIndex,page.getEndWith());//获取数据对象封装到list中
page.setList(list);//再将list封装到page中
request.setAttribute("page",page);//在page放到request域中
request.getRequestDisPatcher("index.jsp").forward(request,response);
}
-----------------------------------
在显示页面中 使用jstl标签 和el表达式
var="employee">
${employee.employee_id
}|${employee.first_name }|${employee.email
}|${employee.phone_number }|${employee.job_id
}
var="i">
-----------------------------
注:此分页只选择了重要代码块加以描述,有需要代码的请留言