以前用dwr写的分页,感觉稍微有点麻烦,简单,可以在csdn的http://download.csdn.net/source/1413703下载,sqlser2000的数据库。
说明:我对json不熟悉,也不是陌生的那种,就是没怎么使用过,只是知道一点点。如果你也是这样的话,不妨你先看看
这里我的上一篇,我还是觉得挺简单的,代码没怎么细化,总体上讲简单,附上一下文件的源文件。
1、分页毫无疑问肯定有数据库链接类,注意,这里是mssql2005的数据库
package com.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* @Info 数据库链接管理类
* @Email wwwchendonglisahao@163.com
* @QQ 271069593
*/
public class DBManager {
private static final String URL = "jdbc:sqlserver://localhost:1433;databasename=Struts";
private static final String USERNAME = "sa";
private static final String PASSWORD = "";
public static Connection getConnection(){
Connection con = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (Exception e) {
System.out.println("DBManager.getConnection()" + e.getMessage());
e.printStackTrace();
}
return con;
}
public static void Close(ResultSet rs ,PreparedStatement pst,Connection conn){
try {
if (rs != null)
rs.close();
if (pst != null)
pst.close();
if (conn != null)
conn.close();
} catch (Exception e) {
System.out.println("DBManager.Close()" + e.getMessage());
e.printStackTrace();
}
}
}
2、数据库表结构信息
use struts
--drop table account
--新建表
create table account(
id int identity(1,1) primary key,
username varchar(10) default '',
age int ,
sex varchar(2)
)
--向表插入100条数据
declare @age int
declare @sex varchar(2)
set @age = 1
while(@age<=100)
begin
if(@age%3=0)
begin
set @sex = '男'
end
else
set @sex = '女'
insert into account values('冬冬',@age,@sex);
set @age = @age + 1
end
--查询表数据
select * from account
3、dwr环境配置
(1)、web.xml配置
<servlet> <servlet-name>dwr-remote</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-remote</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
(2)、dwr.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "dwr30.dtd"> <dwr> <allow> <create creator="new" javascript="p"> <param name="class" value="com.dao.AnalysePage"></param> </create> </allow> </dwr>
说明:我是把dwr3.0的dtd文件下载下来了,所以上面的这一行<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "dwr30.dtd">红字部分请注意。
4、分页处理类
package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import com.db.DBManager;
/**
* 处理完成分页,让dwr在页面上调用处理
*
*/
public class AnalysePage {
private Connection conn = null;
private PreparedStatement pst = null;
private ResultSet rs = null;
/**
* 处理分页的方法
* 默认为每页显示10条数据
* @param page 页数
*/
public ArrayList<String> loadAll(int page){
ArrayList<String> list = null;
int pageSize = 10;
String sql = "select top " + pageSize + " *,(select count(0) from Account) as datasizes from Account where id not in (select top " + (pageSize * (page-1)) + " id from Account)";
System.out.println(sql);
conn = DBManager.getConnection();
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCounts = rsmd.getColumnCount();
if(rs.next()){
list = new ArrayList<String>();
int datasizes = rs.getInt("datasizes");
int count = (int)Math.round(Math.ceil((double)datasizes/(double)pageSize));
do{
String json = "";
for(int i=1;i<=columnCounts;i++){
String columnName = rsmd.getColumnName(i);
String columnValue = rs.getString(i);
if("datasizes".equals(columnName)){
columnValue = count + "";
}
if(i==1){
json += "{";
}
if(i==columnCounts){
json += columnName + ":'" + columnValue + "'";
json += "}";
break;
}
json += columnName + ":'" + columnValue + "',";
}
list.add(json);
}while(rs.next());
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBManager.Close(rs, pst, conn);
}
return list;
}
public static void main(String[] args) {
AnalysePage dao = new AnalysePage();
ArrayList<String> list = dao.loadAll(1);
System.out.println(list.toString());
for (String string : list) {
System.out.println(string);
}
}
}
5、index.jsp页面使用
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>分页列表页面</title>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<script type='text/javascript' src='<%=path %>/dwr/interface/p.js'></script>
<script type='text/javascript' src='<%=path %>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=path %>/dwr/util.js'></script>
<style type="text/css">
#mybody td{
text-align: center;
}
</style>
<script type="text/javascript">
var pageid = 1;
var totalpage = 1;
function loadPage(){
p.loadAll(pageid,analyseData);
}
function analyseData(objjson){
var nodata = document.getElementById("nodata");
if(objjson==null||objjson.length==0){
nodata.style.display = "block";
return ;
}
var tbody = document.getElementById("mybody");
removeTRS(tbody);//显示数据前,先清空数据
for(var i=0;i<objjson.length;i++){
var jj = objjson[i];
eval("var json = " + jj + ";");
totalpage = json.datasizes;
document.getElementById("totalpage").innerHTML = totalpage;
var tr = document.createElement("tr");
for(var j in json){
if("datasizes"==j){
continue;
}
var td = document.createElement("td");
td.innerHTML = json[j];
tr.appendChild(td);
}
tbody.appendChild(tr);
}
}
dwr.util.useLoadingMessage();
/**
*清空tr的数据
*/
function removeTRS(obj){
var len = obj.childNodes.length;
for(var i=0;i<len;i++){
obj.removeChild(obj.firstChild);
}
}
function goFirstPage(){
//判断当前是否为第一页,如果为第一页则不必去加载数据
if(pageid==1){
alert("已经为首页!");
return;
}
pageid = 1;
p.loadAll(1,analyseData);
document.getElementById("thispage").innerHTML = pageid;
}
function goNextPage(){
if(pageid==totalpage){
alert("已经为最末页,没有下1页!");
return;
}
pageid = pageid + 1;
document.getElementById("thispage").innerHTML = pageid;
p.loadAll(pageid,analyseData);
}
function goPrePage(){
if(pageid==1){
alert("已经为第1页,没有上一页!");
return;
}
pageid = pageid - 1;
document.getElementById("thispage").innerHTML = pageid;
p.loadAll(pageid,analyseData);
}
function goLastPage(){
if(pageid==totalpage){
alert('已经为最末页!');
return;
}
pageid = totalpage;
p.loadAll(pageid,analyseData);
document.getElementById("thispage").innerHTML = pageid;
}
</script>
<body>
<table style="border-collapse: collapse;" bordercolor="#FFCCFF" width="60%" border="1">
<tr>
<th>编号</th>
<th>名称</th>
<th>年龄</th>
<th>性别</th>
</tr>
<tbody id="mybody">
<tr id="nodata" style="display: none;">
<td style="text-align: center;" colspan="4">没有数据!</td>
</tr>
</tbody>
<tr>
<td colspan="4" style="text-align: center;">
<a href="javascript:void(0);" οnclick="goFirstPage();" style="padding:5px;">首页</a>
<a href="javascript:void(0);" οnclick="goPrePage();" style="padding:5px;">上一页</a>
<a href="javascript:void(0);" οnclick="goNextPage();" style="padding:5px;">下一页</a>
<a href="javascript:void(0);" οnclick="goLastPage();" style="padding:5px;">末页</a>
<span id="thispage">1</span>/<span id="totalpage">loading...</span>
</td>
</tr>
</table>
<script type="text/javascript">
window.onload = loadPage;
</script>
</body>
</html>