现在的位置: 首页 > 综合 > 正文

第一篇:jsp+mysql数据库分页心得,和初学者一起分享一下

2013年01月21日 ⁄ 综合 ⁄ 共 8779字 ⁄ 字号 评论关闭
 

Mysql数据库中的sql语句select * from tableName limit start,length,意思是从mysql中的tableName表取出start+1开始的length条数据,利用这个可以进行分页处理。

javaBean中取出数据封装到java.util.Vector中,返回这个java.util.Vector

servlet中进行进行分页的具体处理,jsp文件则用于页面显示


这个javaBean用来封装当前页号和每页应该显示的记录数目

package thisBeans;


/**

* @author David.Qiu

*

*/

public class IntBean {

int currentPage;

int pageNum;

public IntBean(){

}

public void setCurrentPage(int currentPage){

this.currentPage=currentPage;

}

public int getCurrentPage(){

return this.currentPage;

}

public void setPageNum(int pageNum){

this.pageNum=pageNum;

}

public int getPageNum(){

return this.pageNum;

}

}



这个javaBean中的getArticles方法用于获取指定页的记录并封装程java.util.Vector

package thisBeans;


import java.sql.*;

import java.util.*;

/**

* @author David.Qiu

* 留言信息bean

*/

public class ArticleBean {


/**

* 构造函数

*/

public ArticleBean() {

// TODO Auto-generated constructor stub

}


/**

* 添加留言

*/

public static boolean articlePublish(Article art){

boolean ok=false;

if(art==null||art.getTitle()==null||art.getContent()==null||art.getNickname()==null)

;

Connection conn=null;

Statement stmt=null;

ResultSet rs=null;

String sql=null;

try{

conn=DatabaseBean.getConnection();

stmt=conn.createStatement();

int articleId=DatabaseBean.getMaxId("article");

sql="insert into article(articleid,title,content,pubdate,userid,hostip,farticleid) values("

+articleId+",'"+art.getTitle()+"','"+art.getContent()+"','"+art.getPubdate()+"',"+art.getUserid()

+",'"+art.getHostip()+"',"+articleId+")";

int nResult=stmt.executeUpdate(sql);

ok=(nResult==1);

}catch(Exception ex){

ex.toString();

ok=false;

}finally{

DatabaseBean.close(conn, stmt, rs);

}

return ok;

}

/**

* 获取留言数目

*/

public static int getArticleCount(){

int articleCount=0;

Connection conn=null;

Statement stmt=null;

ResultSet rs=null;

String sql=null;

try{

conn=DatabaseBean.getConnection();

stmt=conn.createStatement();

sql="select COUNT(articleid) from article where articleid=farticleid";

rs=stmt.executeQuery(sql);

while(rs.next()){

articleCount=rs.getInt(1);

}

}catch(Exception ex){

ex.toString();

}finally{

DatabaseBean.close(conn, stmt, rs);

}

return articleCount;

}

/**

* 获取留言主题

*/

public static Vector<Article> getArticles(int start,int length){

Vector<Article> vt=new Vector<Article>();

Connection conn=null;

Statement stmt=null;

ResultSet rs=null;

String sql=null;

try{

conn=DatabaseBean.getConnection();

stmt=conn.createStatement();

sql="select a.articleid,a.title,a.content,a.pubdate,a.userid,a.hostip,a.farticleid,u.nickname from (select articleid from article a where articleid=farticleid order by pubdate desc limit "+start+","+length+")b,article a,userinfo u where a.articleid=b.articleid and a.userid=u.userid";

//执行sql语句

rs=stmt.executeQuery(sql);

while(rs.next()){

//构造Article对象,并加入vt

Article art=new Article();

art.setArticleId(rs.getInt(1));

art.setTitle(rs.getString(2));

art.setContent(rs.getString(3));

art.setPubdate(rs.getTimestamp(4));

art.setUserid(rs.getInt(5));

art.setHostip(rs.getString(6));

art.setFarticleid(rs.getInt(7));

art.setNickname(rs.getString(8));

vt.add(art);

}

}catch(Exception ex){

ex.toString();

}finally{

DatabaseBean.close(conn, stmt, rs);

}

return vt;

}

}



下面是个servlet


package thisServlet;


import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;


import thisBeans.*;

import java.util.*;

/**

* @author David.Qiu

* 获取留言主题

*/

public class GetArticles extends HttpServlet{

/**

*

*/

private static final long serialVersionUID = 1L;


public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{

//获取参数

//count是留言主题的总数

//currentPage是当前的页号

//pageNum是每页的主题数

int currentPage;

if(request.getParameter("currentPage")==null)

currentPage=0;

else

currentPage=Integer.parseInt(request.getParameter("currentPage"));

int pageNum=2;

IntBean intBean=new IntBean();

intBean.setCurrentPage(currentPage);

intBean.setPageNum(pageNum);

request.setAttribute("intBean",intBean);

//获取留言主题

//注意第一页和其他页的区别

if(currentPage>0){

vt=ArticleBean.getArticles(currentPage*pageNum-1, pageNum);

}else {

vt=ArticleBean.getArticles(currentPage*pageNum, pageNum);

}

request.setAttribute("articles",vt);

response.setContentType("text/html; charset=GBK");

response.setCharacterEncoding("gbk");

RequestDispatcher dispatcher=request.getRequestDispatcher("articleList.jsp");

dispatcher.forward(request,response);

}

public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{

doPost(request,response);

}

}


用于显示的jsp界面

<%@ page language="java" contentType="text/html; charset=gbk"%>

<%@ page pageEncoding="gbk"%><%@ page import="java.util.*" %>

<%@ page import="thisBeans.*" %>

<%@ page import="commonBeans.*" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gbk">

<title>话题列表</title>

</head>

<body>

<%

request.setCharacterEncoding("gbk");

//获取留言主题

Vector vt=(Vector)request.getAttribute("articles");

%>

<%UserInfo user=(UserInfo)session.getAttribute("user_info"); %>

<p><%=user.getNickname() %>欢迎您!

<center>

<table border="0" width="600">

<tr>

<td colspan="3" align="center">留言列表(<a href="logout">退出</a>/<a href="articlePublish.jsp">发表文章</a></td>

</tr>

</table>

<table border="1" width="600">

<%

for(int i=0;i<vt.size();i++){

Article art=(Article)vt.get(i);

%>

<tr>

<td rowspan="2"><%=i+1 %></td>

<td width="250"><%=art.getTitle() %>(<%=art.getPubdate() %>)</td>

<td>

<%=art.getNickname() %>(<%=art.getHostip() %>)

</td>

<td >

<%

out.println("<a href=articleReply?articleId="+art.getArticleId()+">回复</a>&nbsp;");

if(art.getUserid()==user.getUserid())

out.println("<a href=articleUpdate?articleId="+art.getArticleId()+">修改</a>&nbsp;");

if(user.isAdmin())

out.println("<a href=articleDelete?articleId="+art.getArticleId()+">删除</a>&nbsp;");

%>

</td>

</tr>

<tr>

<td colspan="3"><%=art.getContent() %></td>

</tr>

<%

}

%>

</table>

<%

//获取总的留言数

int nCount=ArticleBean.getArticleCount();

IntBean intBean=(IntBean)request.getAttribute("intBean");

int currentPage=intBean.getCurrentPage();

int pageNum=intBean.getPageNum();

%>

<table border="0" width="383">

<tr>

<td width="377">

<p>当前共有<%=ArticleBean.getArticleCount() %>条记录,<%=(ArticleBean.getArticleCount()-1)/pageNum +1%>,每页有<%=pageNum %>条记录,当前为第<%=currentPage+1 %>页。

</td>

</tr>

<tr>

<td width="377" align="center">

<a href="getArticles?currentPage=0">首页</a>

<%

if(currentPage-1>=0){%>

<a href="getArticles?currentPage=<%=currentPage-1 %>">上一页</a>

<%} else{%>

<a>上一页</a>

<%} %>

<%if(currentPage+1<=(ArticleBean.getArticleCount()-1)/pageNum){ %>

<a href="getArticles?currentPage=<%=currentPage+1 %>">下一页</a>

<%}else{ %>

<a> 下一页</a>

<%} %>

<a href="getArticles?currentPage=<%=(ArticleBean.getArticleCount()-1)/pageNum %>">末页</a>

</td>

</tr>

</table>

</center>

</body>

</html>


创建数据库的语句为

# MySQL-Front 3.1 (Build 9.0)



# Host: localhost Database: msgboard

# ------------------------------------------------------

# Server version 5.0.22-community-nt


#

# Table structure for table article

#


CREATE TABLE `article` (

`articleid` int(6) unsigned NOT NULL default '0' COMMENT '留言号码,主键',

`title` varchar(32) NOT NULL COMMENT '留言标题',

`content` varchar(255) NOT NULL COMMENT '留言内容',

`pubdate` datetime NOT NULL COMMENT '发布时间',

`userid` int(6) NOT NULL default '0' COMMENT '发布人',

`hostip` varchar(16) NOT NULL COMMENT '发布人ip地址',

`farticleid` int(6) NOT NULL default '0' COMMENT '回复留言ID,为非回复文章时,与articleid相同',

PRIMARY KEY (`articleid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;


#

# Dumping data for table article

#


INSERT INTO `article` VALUES (1,'???ó??','????','2007-03-16 19:47:24',1,'127.0.0.1',1);

INSERT INTO `article` VALUES (2,'asdsadas','????·?????·?','2007-03-16 19:48:14',2,'127.0.0.1',2);

INSERT INTO `article` VALUES (3,'·????ù·???·?','asdsa','2007-03-16 19:48:28',2,'127.0.0.1',3);

INSERT INTO `article` VALUES (4,'·????ù·???·?','???????? ','2007-03-16 20:07:29',2,'127.0.0.1',4);

INSERT INTO `article` VALUES (5,'·????ù·???·?','???????? ','2007-03-16 20:33:01',2,'127.0.0.1',5);

INSERT INTO `article` VALUES (6,'前卫队','???????? ','2007-03-16 20:33:06',2,'127.0.0.1',6);

INSERT INTO `article` VALUES (7,'阿三多','阿三多岁','2007-03-16 20:43:05',2,'127.0.0.1',7);

INSERT INTO `article` VALUES (8,'邱大为','你好','2007-03-16 20:44:08',2,'127.0.0.1',8);

INSERT INTO `article` VALUES (9,'阿三多岁','阿三多岁大赛的撒大赛的','2007-03-16 20:57:11',2,'127.0.0.1',9);


#

# Table structure for table tableseq

#


CREATE TABLE `tableseq` (

`tablename` varchar(32) NOT NULL default '0' COMMENT '表名,主键',

`maxid` int(6) NOT NULL default '0' COMMENT '最大主键值',

PRIMARY KEY (`tablename`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;


#

# Dumping data for table tableseq

#


INSERT INTO `tableseq` VALUES ('article',9);

INSERT INTO `tableseq` VALUES ('userinfo',2);


#

# Table structure for table userinfo

#


CREATE TABLE `userinfo` (

`userid` int(6) unsigned NOT NULL default '0' COMMENT '用户号码主键',

`username` varchar(32) NOT NULL COMMENT '用户名',

`nickname` varchar(32) NOT NULL COMMENT '昵称',

`password` char(16) NOT NULL COMMENT '密码',

`email` varchar(64) NOT NULL COMMENT '用户电子邮件',

`type` int(4) NOT NULL default '0' COMMENT '用户类型,0为普通用户,1为管理员',

`status` int(4) NOT NULL default '0' COMMENT '帐号状态,0为可用,1为禁止登录',

PRIMARY KEY (`userid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;


#

# Dumping data for table userinfo

#


INSERT INTO `userinfo` VALUES (1,'abc','???ó??','abc','jaklsd',0,0);

INSERT INTO `userinfo` VALUES (2,'qiu','qiu','qiu','4798',0,0);


应该注意的问题

在获取当前页号是利用request.getParameter()获取的是String类型,因该用Integer.parseInt();将其转化为int类型,之后再进行运算和查询

进行分页时注意第一页和其他页的操作

分也处理时Mysql数据库中的sql语句select * from tableName limit start,length,意思是从mysql中的tableName表取出start+1开始的length条数据

抱歉!评论已关闭.