当前位置: 技术问答>java相关
关于分页……
来源: 互联网 发布时间:2015-05-07
本文导语: 不用Vector,如何实现象csdn这样的分页方式?????? | Hafele今天又重新看了JSP论坛(v1.0)的代码,觉得里面有很多是重复的,如分页技术;现在写了一个分页 JavaBean,等有更多的时间再整...
不用Vector,如何实现象csdn这样的分页方式??????
|
Hafele今天又重新看了JSP论坛(v1.0)的代码,觉得里面有很多是重复的,如分页技术;现在写了一个分页
JavaBean,等有更多的时间再整理一下JSP论坛的代码。当然里面的还有很多逻辑可以用JavaBean来写的,有待
慢慢改进。不过在此声明,我对JavaBean也不是很了解,希望高手多多指点,当然更希望这些垃圾代码能够对
你有所帮助。
该JavaBean必须调用另一个连接数据库的JavaBean,该JavaBean所用到的数据库是MySql,不过你可以通过
修改Linkdb.java来将其改为另一种数据库。为了使代码容易理解,我尽量做了解释。代码具体如下:
一、连接数据库的JavaBean:Linkdb.java
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Linkdb.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
package pagination;
import java.sql.*;
public class Linkdb {
String strDriver="org.gjt.mm.mysql.Driver";
//使用时请具体修改数据库名称,用户名和密码。
String strConn="jdbc:mysql://localhost/forum?user=root&password=admin";
private Connection conn = null;
private Statement stmt = null;
ResultSet rs = null;
public Linkdb()
{
//连接MySql_jdbc驱动程序
try {
Class.forName(strDriver).newInstance();
} catch (Exception E) {
System.err.println("不能连接MySql数据库!");
}
}
//执行Select语句
public ResultSet executeQuery(String sql) {
rs = null;
try {
conn = DriverManager.getConnection(strConn);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
}catch(SQLException ex) {
System.err.println("执行SQL语句出错:" + ex.getMessage());
}
return rs;
}
//执行Insert,Update语句
public void executeUpdate(String sql) {
stmt = null;
rs=null;
try {
conn = DriverManager.getConnection(strConn);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt.executeQuery(sql);
stmt.close();
conn.close();
}
catch(SQLException ex) {
System.err.println("执行SQL语句出错: " + ex.getMessage());
}
}
public void closeStmt(){
try{
stmt.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
public void closeConn(){
try{
conn.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
二、分页的JavaBean:Pagi.java
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Pagi.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
package pagination;
import java.util.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Pagi
{
ResultSet CountTopicrs=null; //初始化总记录数Rs变量
ResultSet Pagirs=null; //初始化分页时Rs变量
public int intCountTopic=0; //主题总数
public int intPageSize; //每页显示主题数
public int intPageCount; //总页数
public int intPage=1; //当前页数
// int i;
public String nowPage; //初始化当前页intPage变量,以准确便获取当前页。
public String HttpFile; //当前的地址栏的文件。
Linkdb db; //定义Linkdb类的一个对象。
//定义构造器,初始化每页显示的主题数和数据库的连接。
public Pagi(){
intPageSize=2;
db = new Linkdb();
}
//Countsql:总记录的Query字符串。[形式为select count(*) from tablename]
//Pagisql :要分页的Query字符串。[形式为select * from tablename where ...]
//request :参数传递过程中的变量。[用来控制翻页时的pages变量]
public ResultSet querySql(String Countsql,String Pagisql,HttpServletRequest request)
throws SQLException{
//获取当前文件名。
HttpFile=request.getRequestURI();
//获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数]
nowPage=request.getParameter("pages");
if (nowPage==null){ intPage=1; }
else{ intPage=Integer.parseInt(nowPage);
if (intPageintPageCount)
{
intPage=intPageCount;
}
//关闭总主题数的数据集。
CountTopicrs.close();
//获取执行分页的结果集。
Pagirs=db.executeQuery(Pagisql);
return Pagirs;
}//end querySql function.
//获取记录总数。
public int getCountTopic()
{
return intCountTopic;
}
//获取总页数。
public int getPageCount()
{
return intPageCount;
}
//获取当前页数。
public int getIntPage()
{
return intPage;
}
//获取当前页的数据。boodata为True,表示要加入该数据到当前页。
//这里可能会在JSP调用时影响速度[因为调用时要多一层循环],因此放到JSP中嵌入,待改进。
//该代码暂时保留。
// public boolean getData(){
// boolean boodata=false;
// if (intPageCount>0)
// {
// try
// {
// while (Pagirs.next())
// {
// i++;
/// if (i>((intPage-1)*intPageSize) &&(i1)
str += " 第一页 ";
else str += " 第一页 ";
if(intPage>1)
str += " 上一页 ";
else str += " 上一页 ";
if(intPage1&&intPage!=intPageCount)
str += " 最后页";
else str += " 最后页 ";
return str;
}
} //end.
三、调用实例:testpage.jsp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%testpage.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0)
{
int i=0;
while (rs.next())
{
i++;
String aa="";
String bb="";
if (i>((pagi.intPage-1)*pagi.intPageSize) &&(i
给分,ok?
JavaBean,等有更多的时间再整理一下JSP论坛的代码。当然里面的还有很多逻辑可以用JavaBean来写的,有待
慢慢改进。不过在此声明,我对JavaBean也不是很了解,希望高手多多指点,当然更希望这些垃圾代码能够对
你有所帮助。
该JavaBean必须调用另一个连接数据库的JavaBean,该JavaBean所用到的数据库是MySql,不过你可以通过
修改Linkdb.java来将其改为另一种数据库。为了使代码容易理解,我尽量做了解释。代码具体如下:
一、连接数据库的JavaBean:Linkdb.java
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Linkdb.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
package pagination;
import java.sql.*;
public class Linkdb {
String strDriver="org.gjt.mm.mysql.Driver";
//使用时请具体修改数据库名称,用户名和密码。
String strConn="jdbc:mysql://localhost/forum?user=root&password=admin";
private Connection conn = null;
private Statement stmt = null;
ResultSet rs = null;
public Linkdb()
{
//连接MySql_jdbc驱动程序
try {
Class.forName(strDriver).newInstance();
} catch (Exception E) {
System.err.println("不能连接MySql数据库!");
}
}
//执行Select语句
public ResultSet executeQuery(String sql) {
rs = null;
try {
conn = DriverManager.getConnection(strConn);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
}catch(SQLException ex) {
System.err.println("执行SQL语句出错:" + ex.getMessage());
}
return rs;
}
//执行Insert,Update语句
public void executeUpdate(String sql) {
stmt = null;
rs=null;
try {
conn = DriverManager.getConnection(strConn);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt.executeQuery(sql);
stmt.close();
conn.close();
}
catch(SQLException ex) {
System.err.println("执行SQL语句出错: " + ex.getMessage());
}
}
public void closeStmt(){
try{
stmt.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
public void closeConn(){
try{
conn.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
二、分页的JavaBean:Pagi.java
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Pagi.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
package pagination;
import java.util.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Pagi
{
ResultSet CountTopicrs=null; //初始化总记录数Rs变量
ResultSet Pagirs=null; //初始化分页时Rs变量
public int intCountTopic=0; //主题总数
public int intPageSize; //每页显示主题数
public int intPageCount; //总页数
public int intPage=1; //当前页数
// int i;
public String nowPage; //初始化当前页intPage变量,以准确便获取当前页。
public String HttpFile; //当前的地址栏的文件。
Linkdb db; //定义Linkdb类的一个对象。
//定义构造器,初始化每页显示的主题数和数据库的连接。
public Pagi(){
intPageSize=2;
db = new Linkdb();
}
//Countsql:总记录的Query字符串。[形式为select count(*) from tablename]
//Pagisql :要分页的Query字符串。[形式为select * from tablename where ...]
//request :参数传递过程中的变量。[用来控制翻页时的pages变量]
public ResultSet querySql(String Countsql,String Pagisql,HttpServletRequest request)
throws SQLException{
//获取当前文件名。
HttpFile=request.getRequestURI();
//获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数]
nowPage=request.getParameter("pages");
if (nowPage==null){ intPage=1; }
else{ intPage=Integer.parseInt(nowPage);
if (intPageintPageCount)
{
intPage=intPageCount;
}
//关闭总主题数的数据集。
CountTopicrs.close();
//获取执行分页的结果集。
Pagirs=db.executeQuery(Pagisql);
return Pagirs;
}//end querySql function.
//获取记录总数。
public int getCountTopic()
{
return intCountTopic;
}
//获取总页数。
public int getPageCount()
{
return intPageCount;
}
//获取当前页数。
public int getIntPage()
{
return intPage;
}
//获取当前页的数据。boodata为True,表示要加入该数据到当前页。
//这里可能会在JSP调用时影响速度[因为调用时要多一层循环],因此放到JSP中嵌入,待改进。
//该代码暂时保留。
// public boolean getData(){
// boolean boodata=false;
// if (intPageCount>0)
// {
// try
// {
// while (Pagirs.next())
// {
// i++;
/// if (i>((intPage-1)*intPageSize) &&(i1)
str += " 第一页 ";
else str += " 第一页 ";
if(intPage>1)
str += " 上一页 ";
else str += " 上一页 ";
if(intPage1&&intPage!=intPageCount)
str += " 最后页";
else str += " 最后页 ";
return str;
}
} //end.
三、调用实例:testpage.jsp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%testpage.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0)
{
int i=0;
while (rs.next())
{
i++;
String aa="";
String bb="";
if (i>((pagi.intPage-1)*pagi.intPageSize) &&(i
给分,ok?
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。