pingpang

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  21 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

在浏览网页时,经常会看到分页显示的页面。如果想把大量的数据提供给浏览者,分页显示是个非常实用的方法。分页显示数据能够帮助浏览者更好地查看信息,能够有条理的显示信息。
在传统的web技术中,分页显示的相关操作都是在服务器端进行的,服务器端获取客户端的请求分页,并根据请求页数获取指定的结果集。最后把结果集中的数据返回到客户端,这时返回结果中不但包含了数据,还可能包含了数据的显示样式。客户端的每一次数据更新,都会重新打开一个网页,如果网页中包含了很多html元素,就会造成网页打开速度较慢的情况。
为了显示部分数据,而需要加载整个页面的数据,显得有点得不偿失。使用Ajax技术可以很好的弥补这些问题,服务器端只传输数据库表中的数据,客户端获取这些数据只更新局部内容,与数据无关的其他元素保持不变。
现在创建一个实例,以演示使用Ajax技术实现数据的分页显示。该实例的代码实现分为服务器端和客户端。

1,准备工作


我们这里使用Mysql数据库,我在shop数据库中创建了一张mobileshop表,这张表有两个字段name,model。
打开记事本,输入下列代码:

<%@ page language="java" import="java.util.*,java.sql.*,java.io.*" pageEncoding="GBK"%>
<%
 class DBManager{
     
String userName="root";
    
String password="123456";
    Connection conn
=null;
    Statement stmt
=null;
    
String url="jdbc:mysql://localhost:3306/shop";
    ResultSet rst;
public DBManager(String sql){

    try {
        Class.forName(
"com.mysql.jdbc.Driver");
        conn
=DriverManager.getConnection(url,userName,password);
        stmt
=conn.createStatement();
        rst
=stmt.executeQuery(sql);
    } catch (Exception e) {
        
// TODO Auto-generated catch block
        e.printStackTrace();
    }    
}
public ResultSet getResultSet(){
return rst;
}
}

%>

将上述代码保存为Conn.jsp,用于返回查询结果集。

2,服务器端代码


     在本实例中,服务器端代码具有获取客户端请求页数和产生指定记录集的功能。打开记事本,输入下列代码:


<%@ page contentType="text/html; charset=utf-8" import="java.sql.*" errorPage="" %>
<%@ include file="Conn.jsp" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%
 try
 {
ResultSet rs
=new DBManager("select name,model from mobileshop").getResultSet();
int intPageSize;      //一页显示的记录数
int intRowCount;      //记录的总数
int intPageCount;     //总页数
int intPage;         //待显示的页码
String strPage;
int i;
intPageSize
=2;       //设置一页显示的记录数
strPage
=request.getParameter("page");         //取得待显示的页码
if(strPage==null)             //判断strPage是否等于null,如果是,则显示第一页数据
{
intPage
=1;
}
else{
intPage
=java.lang.Integer.parseInt(strPage);   //将字符串转化为整形
}
if(intPage<1)
{
intPage
=1;
}
//获取记录总数
rs.last();
intRowCount
=rs.getRow();
//计算总页数
intPageCount
=(intRowCount+intPageSize-1)/intPageSize;
//调整显示的页码
if(intPage>intPageCount) intPage=intPageCount;
if(intPageCount>0)
{
//将记录指针定位到待显示页的第一条记录上
rs.absolute((intPage
-1)*intPageSize+1);
}
//下面用于显示数据
i
=0;
  StringBuffer content
=new StringBuffer(""); 
  response.setContentType(
"text/xml"); 
  response.setHeader(
"Cache-Control","no-cache");
  content.append(
"<?xml version=\"1.0\"   encoding=\"UTF-8\" ?>");
  content.append(
"<contents>");
while(i<intPageSize && !rs.isAfterLast())
{
     
     
String name=rs.getString("name");
     
String email=rs.getString("model");
     content.append(
"<content>");
     content.append(
"<name>"+ name +"</name>");
     content.append(
"<model>"+email+"</model>");
     content.append(
"</content>");
 rs.next();
 i
++;
 }
 content.append(
"</contents>");
 System.out.print(content);
 out.print(content);
 }
 catch(Exception e)
 {
 e.printStackTrace();
 }
 
%>

posted on 2012-08-12 23:05 往事随风 阅读(1973) 评论(2)  编辑  收藏

Feedback

# re: Ajax的常用技巧---实现数据库分页[未登录] 2012-08-13 08:54 james
楼主你的代码存在连接泄露的问题  回复  更多评论
  

# re: Ajax的常用技巧---实现数据库分页 2012-08-13 15:47 张晓留
楼主,你代码有很大问题啊,createStatement 没有指定游标参数,rs.last()肯定会报错的,还是jsp直接内嵌了out的xml,能直接显示嘛?  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: