请高手共同完善一下我这个分页bean好吗?(在线,立刻给分) 也可以返回hashtable,只不过此时hashtable中存放的是vector!也就是说,把每条纪录线放入一个vector中,在放入hashtable。或者你也可把一条纪录放进一个hashtable,在吧hashtable放入已vector,也就是你的想法! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是的,基于把一条纪录放进一个hashtable,在吧hashtable放入已vector的想法,我做了一下改动,可为何返回的vector的大小为0啊,应该是有记录的呀。返回的记录总数pagecount=17。页的总数为2。那么vector的大小应该是每页显示的记录数大小啊。帮帮挑挑错》》改动的bean 如下:package fawBean;import java.util.*;import java.io.*;import java.sql.*;import fawBean.*;public class PagesBean{ int intPage; //当前页码 int intPageSize; //每页记录数 int intRowCount; //总记录数 int intPageCount ; //总页码数 String tablename; //数据表名 String sqlstr; //sql语句的检索条件 String sqlparam; //选取参数 int paramcount;//字段的个数 //取的记录集,返回为hashtable public Vector getData() { Vector returndata=new Vector(); Hashtable returnrow = new Hashtable(); Connection conn = null; try { String selectsql; Linkdb db=new Linkdb();// conn = LocalPool.getConnection(); //连接数据库 int RowCount = rowcount(); selectsql = selectstr(); intPageCount = (RowCount + intPageSize - 1) / intPageSize; //总页码数 //PreparedStatement pstmt = conn.prepareStatement(selectsql); ResultSet rs = db.executeQuery(selectsql); if (intPage > RowCount) intPage = intPageCount; //输入页码数大于总页码数的处理 if (intPageCount > 0) { int startrow = (intPage - 1) * intPageSize + 1; //开始显示记录数 for (int i = 0; i < startrow; i++) { rs.next(); } //将记录指针定位到待显示页的第一条记录上 //判断字段数据类型 //date型 返回 93 //int型 返回 2 //String型 返回 12 //ResultSetMetaData columnType = rs.getMetaData(); //int t = 0; //System.out.println("type=" + columnType.getColumnType(1)); //if (columnType.getColumnType(1) == 12) //{ //输出数据 int i = 0; while (i < intPageSize && !rs.isAfterLast()) { for(int j=0;j<paramcount;j++) { //String ResultSet = rs.getString(1); //获取数据写入hashtable returnrow.put(new Integer(j),rs.getString(j)); } rs.next(); i++; returndata.add(returnrow);} } } catch (SQLException ex) { System.out.print("错误="); ex.printStackTrace(System.out); } return returndata; }//返回总页码数:public int getPageCount(){return intPageCount;}//返回总行数:public int getRowCount(){return intRowCount;}//返回记录总数:public int rowcount(){Connection conn = null;Linkdb db=new Linkdb();try{String countsql; //sql语句计算记录总数if (sqlstr == null){countsql = new String("select count(*) " + " from " + tablename);} else{countsql =new String("select count(*) " + " from " + tablename + " where " + sqlstr);}//conn = LocalPool.getConnection(); //连接数据库//PreparedStatement pstmt = conn.prepareStatement(countsql);ResultSet rs = db.executeQuery(countsql);rs.next();intRowCount = rs.getInt(1); //总记录数rs.close();//pstmt.close();//conn = null;} catch (Exception ex){System.out.println("错误!");}return intRowCount;}//返回查询的sql 语句:public String selectstr(){String sql;if (sqlstr == null){sql = new String("select " + sqlparam + " from " + tablename);} else{sql =new String("select " + sqlparam + " from " + tablename + " where " + sqlstr);}return sql;}//字段个数的设置:public void setParamCount(String count){ this.paramcount=Integer.parseInt(count);}public int getParamCount(){ return paramcount;}//当前页码的取得:public void setPage(String page){if (page.trim().length() == 0)//检查输入参数是否为空{this.intPage = 1;} else if (page.trim().length() != 0){this.intPage = Integer.parseInt(page);}if (this.intPage < 1)this.intPage = 1;}/** * 此处插入方法说明。 * 设定每页显示记录数目(默认为每页显示10条记录) * 创建日期:(2001-7-23 10:19:06) * @param pagenumber int */public void setPageSize(String size){if (size.trim().length() == 0)//检查输入参数是否为空{this.intPageSize = 10;} else if (size.trim().length() != 0){this.intPageSize = Integer.parseInt(size);}if (this.intPageSize < 1)this.intPageSize = 10;}//检索返回字段:public void setSqlParam(String param){if (param.trim().length() != 0)//检查输入参数是否为空{this.sqlparam = param.trim();}}/** * 此处插入方法说明。 * 取得sql语句的检索条件 * 创建日期:(2001-7-23 10:00:30) * @param sqlstr java.lang.String */public void setSqlstr(String str){if (str.trim().length() != 0) //检查输入参数是否为空{this.sqlstr = str.trim();} elsethis.sqlstr = new String(" ");}/** * 此处插入方法说明。 * 设定检索数据表。 * 创建日期:(2001-7-24 10:41:51) * @param tablename java.lang.String */public void setTable(String table){if (table.trim().length() != 0) //检查输入参数是否为空{this.tablename = table.trim();}}}前端调用如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><%@ page contentType="text/html;charset=GB2312" import="java.util.*,fawBean.PagesBean"%><html><head> <title>pages bean</title></head><body><% PagesBean pb = new PagesBean();pb.setPageSize("10");pb.setTable("speedfaw.fawonline_ticket_train");pb.setSqlParam("sfz,zdz");pb.setPage("1");pb.setParamCount("2");String teststring=pb.selectstr();out.println(teststring);Vector myvector=pb.getData();out.println(myvector.size());int rowcount=pb.getRowCount();out.println(rowcount);int pagecount=pb.getPageCount();out.println(pagecount); %></body></html>返回的三个数为0,17,2 是的,基于把一条纪录放进一个hashtable,在吧hashtable放入已vector的想法,我做了一下改动,可为何返回的vector的大小为0啊,应该是有记录的呀。返回的记录总数pagecount=17。页的总数为2。那么vector的大小应该是每页显示的记录数大小啊。帮帮挑挑错》》改动的bean 如下:package fawBean;import java.util.*;import java.io.*;import java.sql.*;import fawBean.*;public class PagesBean{ int intPage; //当前页码 int intPageSize; //每页记录数 int intRowCount; //总记录数 int intPageCount ; //总页码数 String tablename; //数据表名 String sqlstr; //sql语句的检索条件 String sqlparam; //选取参数 int paramcount;//字段的个数 //取的记录集,返回为hashtable public Vector getData() { Vector returndata=new Vector(); Hashtable returnrow = new Hashtable(); Connection conn = null; try { String selectsql; Linkdb db=new Linkdb();// conn = LocalPool.getConnection(); //连接数据库 int RowCount = rowcount(); selectsql = selectstr(); intPageCount = (RowCount + intPageSize - 1) / intPageSize; //总页码数 //PreparedStatement pstmt = conn.prepareStatement(selectsql); ResultSet rs = db.executeQuery(selectsql); if (intPage > RowCount) intPage = intPageCount; //输入页码数大于总页码数的处理 if (intPageCount > 0) { int startrow = (intPage - 1) * intPageSize + 1; //开始显示记录数 for (int i = 0; i < startrow; i++) { rs.next(); } //将记录指针定位到待显示页的第一条记录上 //判断字段数据类型 //date型 返回 93 //int型 返回 2 //String型 返回 12 //ResultSetMetaData columnType = rs.getMetaData(); //int t = 0; //System.out.println("type=" + columnType.getColumnType(1)); //if (columnType.getColumnType(1) == 12) //{ //输出数据 int i = 0; while (i < intPageSize && !rs.isAfterLast()) { for(int j=0;j<paramcount;j++) { //String ResultSet = rs.getString(1); //获取数据写入hashtable returnrow.put(new Integer(j),rs.getString(j)); } rs.next(); i++; returndata.add(returnrow);} } } catch (SQLException ex) { System.out.print("错误="); ex.printStackTrace(System.out); } return returndata; }//返回总页码数:public int getPageCount(){return intPageCount;}//返回总行数:public int getRowCount(){return intRowCount;}//返回记录总数:public int rowcount(){Connection conn = null;Linkdb db=new Linkdb();try{String countsql; //sql语句计算记录总数if (sqlstr == null){countsql = new String("select count(*) " + " from " + tablename);} else{countsql =new String("select count(*) " + " from " + tablename + " where " + sqlstr);}//conn = LocalPool.getConnection(); //连接数据库//PreparedStatement pstmt = conn.prepareStatement(countsql);ResultSet rs = db.executeQuery(countsql);rs.next();intRowCount = rs.getInt(1); //总记录数rs.close();//pstmt.close();//conn = null;} catch (Exception ex){System.out.println("错误!");}return intRowCount;}//返回查询的sql 语句:public String selectstr(){String sql;if (sqlstr == null){sql = new String("select " + sqlparam + " from " + tablename);} else{sql =new String("select " + sqlparam + " from " + tablename + " where " + sqlstr);}return sql;}//字段个数的设置:public void setParamCount(String count){ this.paramcount=Integer.parseInt(count);}public int getParamCount(){ return paramcount;}//当前页码的取得:public void setPage(String page){if (page.trim().length() == 0)//检查输入参数是否为空{this.intPage = 1;} else if (page.trim().length() != 0){this.intPage = Integer.parseInt(page);}if (this.intPage < 1)this.intPage = 1;}/** * 此处插入方法说明。 * 设定每页显示记录数目(默认为每页显示10条记录) * 创建日期:(2001-7-23 10:19:06) * @param pagenumber int */public void setPageSize(String size){if (size.trim().length() == 0)//检查输入参数是否为空{this.intPageSize = 10;} else if (size.trim().length() != 0){this.intPageSize = Integer.parseInt(size);}if (this.intPageSize < 1)this.intPageSize = 10;}//检索返回字段:public void setSqlParam(String param){if (param.trim().length() != 0)//检查输入参数是否为空{this.sqlparam = param.trim();}}/** * 此处插入方法说明。 * 取得sql语句的检索条件 * 创建日期:(2001-7-23 10:00:30) * @param sqlstr java.lang.String */public void setSqlstr(String str){if (str.trim().length() != 0) //检查输入参数是否为空{this.sqlstr = str.trim();} elsethis.sqlstr = new String(" ");}/** * 此处插入方法说明。 * 设定检索数据表。 * 创建日期:(2001-7-24 10:41:51) * @param tablename java.lang.String */public void setTable(String table){if (table.trim().length() != 0) //检查输入参数是否为空{this.tablename = table.trim();}}}前端调用如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><%@ page contentType="text/html;charset=GB2312" import="java.util.*,fawBean.PagesBean"%><html><head> <title>pages bean</title></head><body><% PagesBean pb = new PagesBean();pb.setPageSize("10");pb.setTable("speedfaw.fawonline_ticket_train");pb.setSqlParam("sfz,zdz");pb.setPage("1");pb.setParamCount("2");String teststring=pb.selectstr();out.println(teststring);Vector myvector=pb.getData();out.println(myvector.size());int rowcount=pb.getRowCount();out.println(rowcount);int pagecount=pb.getPageCount();out.println(pagecount); %></body></html>返回的三个数为0,17,2 你试着把hasttable的声明放到while循环中,或者在while循环开始部分clear hashtable的数据(可能是clear把),否则,vector中只有一个hashtable! 不对,我想错了,hashtable虽然结果不对,vector还是应该有值的!你在bean中打印一下hasttable和vector的size,看到迪有没得到值! 你刚才说的我试了,还是不行。哥哥,在bean里怎么打呀,还得做main函数??我要是能在bean 打,我就不在jsp页中做测试了呀。 System.out.print("returnDate size is " + returnDate.size());回在后台打出信息!你用的web服务器是什么?weblogic?tomcat?jrun? 服务器控制台。sigh关注这个问题。 你的分页bean太罗嗦package whc.skyline;/** * Title: 分页主程序 * Description: * Copyright: Copyright (c) 2002 * Company: * @author skyline * @version 1.0 */import java.util.*;import java.sql.*;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import whc.skyline.*;public class Pagi{ResultSet CountTopicrs=null; //初始化总记录数Rs变量ResultSet Pagirs=null; //初始化分页时每页的记录集数Rs变量private int intCountTopic=0; //主题总数,即select选出的、库中所有记录总数public int intPageSize; //每页显示主题数,即每页显示的记录总数public int intPageCount; //总页数public int intPage=0; //当前页数private String Countsql=null,Pagisql=null,str=null,str_where=null;private String str_parameter="";//public static int pages_n=1; //传分页参数值private String nowPage; //初始化当前页intPage变量,以准确便获取当前页,即获取当前页的具体页号。private String HttpFile; //当前的地址栏的文件,即具体jsp文件。Linkdb db = new Linkdb();//连接数据库//接收传分页参数public void setPages(int n){ intPageSize = n;}/*功能:接收参数组织SQL语句 *str_table :分页显示的表名 *str_where:分页的where条件 *httpfile :具体jsp文件 *pages :获取地址栏传过来的pages参数 */public ResultSet setQuerysql(String str_table,String str_where, String httpfile,String pages)throws SQLException{ResultSet r=null;this.nowPage=pages;this.HttpFile=httpfile;//分页文件名Countsql="select count(*) from "+str_table+" "+str_where;Pagisql="select * from "+str_table+" "+str_where;try{r=querySql(Countsql,Pagisql);}catch(SQLException _ex){System.out.println(_ex);}return r;}/*功能:接收参数进行首尾页判断 *Countsql:总记录的Query字符串。[形式为select count(*) from tablename] *Pagisql :要分页的Query字符串。[形式为select * from tablename where ...] *request :参数传递过程中的变量。[用来控制翻页时的pages变量] */public ResultSet querySql(String Countsql,String Pagisql)//,HttpServletRequest requestthrows SQLException{//获取当前文件名。//HttpFile=request.getRequestURI();//获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数]//nowPage=request.getParameter("pages");//由参数HttpServletRequest request传递而来if (nowPage==null) { intPage=1; }else { intPage=Integer.parseInt(nowPage); if (intPage<1) intPage=1; }//end else//获取总记录数的结果集。CountTopicrs=db.executeQuery(Countsql);if (CountTopicrs.next()){intCountTopic=CountTopicrs.getInt(1); //获取第一个字段的整型}//获取总页数。intPageCount = (intCountTopic+intPageSize-1)/intPageSize;//如果当前页大于总页数,则当前页等于总页数。//=最后一页if (intPage>intPageCount){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) &&(i<=intPage*intPageSize))// {// boodata=true;// }// } //endwhile.// }//end try.// catch(Exception e){// System.out.println(e.toString());// }// } //endif.// return boodata;// } //end getData();//设置分页参数public void setPfoot(String str){this.str_parameter+=str;}//分页栏函数。public String PageFooter() {String str = "";int next, prev;prev=intPage-1;next=intPage+1;str +="<font style='font-size: 9pt'>总计<font color='red'>"+getCountTopic()+"</font>条记录,"+"【共<font color='red'>"+getPageCount()+"</font>页】";str +="【条"+intPageSize+"/页】 当前第<font color='red'>"+getIntPage()+"</font>页(列出第"+((intPageSize*getIntPage()+1)-intPageSize)+"到第"+(getIntPage()*intPageSize)+"条) ";//getIntPage()*intPageSizeif(intPage>1)str += " <A href=" + HttpFile + "?pages=1"+str_parameter+">第一页</A> ";else str += " 第一页 ";if(intPage>1)str += " <A href=" + HttpFile + "?pages=" + prev +str_parameter+ ">上一页</A> ";else str += " 上一页 ";if(intPage<intPageCount)str += " <A href=" + HttpFile + "?pages=" + next +str_parameter+ ">下一页</A> ";else str += " 下一页 ";if(intPageCount>1&&intPage!=intPageCount)str += " <A href=" + HttpFile + "?pages=" + intPageCount +str_parameter+ ">最后页</A>";else str += " 最后页 </font>";str +=" 转到<INPUT TYPE='text'NAME='go' size='2'>页 <input type='submit' name='Submit' value='go'>";return str;}//关闭数据库连接public void closeConn(){db.closeStmt();db.closeConn();}} //end. 连接数据库package whc.skyline;import java.sql.*;/** * Title: 数据库底层连接 * Description: * Copyright: Copyright (c) 2002 * Company: * @author skyline * @version 1.0 */public class Linkdb {String strDriver="sun.jdbc.odbc.JdbcOdbcDriver";//加载驱动程序String strConn="jdbc:odbc:dbserver";private Connection conn = null;private Statement stmt = null; //执行SQL语句ResultSet rs = null;public Linkdb(){try{ Class.forName(strDriver).newInstance(); //**newInstance()什么意思?**//} catch (Exception e) { System.err.println("不能连接数据库!"+e.getMessage());}}//执行Select语句public ResultSet executeQuery(String sql) {try {conn = DriverManager.getConnection(strConn,"sa","sa"); //建立与数据源之间的连接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) {try {conn = DriverManager.getConnection(strConn,"sa","sa");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();}}} jsp调用如下:<%@ page contentType="text/html; charset=gb2312" %><%@ page import="java.sql.*, whc.skyline.*" %><% /** * Title: 分页jsp程序 * Description: 动态分页显示,只需向Pagi.class传入表名及where 查询条件即可 * Copyright: Copyright (c) 2002 * Company: * @author skyline * @version 1.0 */%><% String nowPage=""; String str_where="";//设置查询条件,默认值为空 String footer=""; String field_1="",field_2="",field_3="",field_4="";%><jsp:useBean id="pagi" scope="page" class="whc.skyline.Pagi" /><html><head></head><body><table width="70%" align='center'><tr></td><b>分页显示效果:</b></td></tr></table><table width=70% border='1' cellspacing='0' cellpadding='0' align='center' bordercolorlight='#000000' bordercolordark='#FFFFFF'><%nowPage=request.getParameter("pages"); //获取地址栏传过来的pages参数if (nowPage==null||nowPage.equals("null")) nowPage="0"; //将当前页的具体页号置为0pagi.setPages(5); //设置分页的每页条数ResultSet rs = pagi.setQuerysql("a_test2","str_where","page.jsp",nowPage);footer = pagi.PageFooter(); //读分页栏//输出表头out.print("<tr><td>序号</td><td>姓名</td><td>性别</td><td>邮箱</td></tr>");try{ if (pagi.intPageCount>0) { int i=0; while (rs.next()) { i++; if (i>((pagi.intPage-1)*pagi.intPageSize) &&(i<=pagi.intPage*pagi.intPageSize)) { field_1=rs.getString(1)+""; field_2=rs.getString(2)+""; field_3=rs.getString(3)+""; field_4=rs.getString(4)+""; %> <tr><td><%=field_1%></td><td><%=field_2%></td><td><%=field_3%></td><td><%=field_4%></td></tr> <% }//end if } //end while } //end if rs.close(); } catch(Exception e) {out.println(e.getMessage());} finally {pagi.closeConn();}out.print("</table>");out.println("<table border=0 width='70%' cellspacing='0' cellpadding='0' align='center' bordercolorlight='#000000' bordercolordark='#FFFFFF'><tr><td colspan=4 align=center>"+footer+"</td></tr>");%></table></body></html> 我想在java的字符串变量中加入""双引号,比如str= str+"你好,我是小花猫",在<小花猫>中用""双引号即"小花猫",该如何做呢 extjs生成树有时候对有时候错,请高人指点 action执行问题 struts2,ajax,json问题 jboss下出现404错误,但是在tomcat下正常 超链接能传递对象吗,请教 jsp表单验证转向的问题! 【求助】TOMCAT问题! xml问题 请大家说说一共有什么jsp服务器,以及他们的优、缺点 我怎么样才能得到查询记录中的行数? 关于JSP标记扩展类的问题
package fawBean;
import java.util.*;
import java.io.*;
import java.sql.*;
import fawBean.*;public class PagesBean
{
int intPage; //当前页码
int intPageSize; //每页记录数
int intRowCount; //总记录数
int intPageCount ; //总页码数
String tablename; //数据表名
String sqlstr; //sql语句的检索条件
String sqlparam; //选取参数
int paramcount;//字段的个数 //取的记录集,返回为hashtable
public Vector getData()
{
Vector returndata=new Vector();
Hashtable returnrow = new Hashtable();
Connection conn = null;
try
{
String selectsql;
Linkdb db=new Linkdb();
// conn = LocalPool.getConnection(); //连接数据库
int RowCount = rowcount();
selectsql = selectstr();
intPageCount = (RowCount + intPageSize - 1) / intPageSize; //总页码数
//PreparedStatement pstmt = conn.prepareStatement(selectsql);
ResultSet rs = db.executeQuery(selectsql);
if (intPage > RowCount)
intPage = intPageCount; //输入页码数大于总页码数的处理 if (intPageCount > 0)
{
int startrow = (intPage - 1) * intPageSize + 1; //开始显示记录数
for (int i = 0; i < startrow; i++)
{
rs.next();
} //将记录指针定位到待显示页的第一条记录上 //判断字段数据类型
//date型 返回 93
//int型 返回 2
//String型 返回 12
//ResultSetMetaData columnType = rs.getMetaData();
//int t = 0;
//System.out.println("type=" + columnType.getColumnType(1));
//if (columnType.getColumnType(1) == 12)
//{ //输出数据
int i = 0; while (i < intPageSize && !rs.isAfterLast())
{
for(int j=0;j<paramcount;j++)
{
//String ResultSet = rs.getString(1); //获取数据写入hashtable
returnrow.put(new Integer(j),rs.getString(j));
}
rs.next();
i++; returndata.add(returnrow);
}
} }
catch (SQLException ex)
{
System.out.print("错误=");
ex.printStackTrace(System.out);
}
return returndata;
}//返回总页码数:
public int getPageCount()
{
return intPageCount;
}
//返回总行数:
public int getRowCount()
{return intRowCount;
}
//返回记录总数:public int rowcount()
{
Connection conn = null;
Linkdb db=new Linkdb();
try
{
String countsql; //sql语句计算记录总数
if (sqlstr == null)
{
countsql = new String("select count(*) " + " from " + tablename);
} else
{
countsql =
new String("select count(*) " + " from " + tablename + " where " + sqlstr);
}
//conn = LocalPool.getConnection(); //连接数据库
//PreparedStatement pstmt = conn.prepareStatement(countsql);
ResultSet rs = db.executeQuery(countsql);
rs.next();
intRowCount = rs.getInt(1); //总记录数
rs.close();
//pstmt.close();
//conn = null;} catch (Exception ex)
{
System.out.println("错误!");}
return intRowCount;
}//返回查询的sql 语句:public String selectstr()
{
String sql;
if (sqlstr == null)
{
sql = new String("select " + sqlparam + " from " + tablename);
} else
{
sql =
new String(
"select " + sqlparam + " from " + tablename + " where " + sqlstr);
}
return sql;
}
//字段个数的设置:
public void setParamCount(String count)
{
this.paramcount=Integer.parseInt(count);
}
public int getParamCount()
{
return paramcount;
}//当前页码的取得:public void setPage(String page)
{
if (page.trim().length() == 0)//检查输入参数是否为空
{
this.intPage = 1;
} else if (page.trim().length() != 0)
{
this.intPage = Integer.parseInt(page);
}
if (this.intPage < 1)
this.intPage = 1;}
/**
* 此处插入方法说明。
* 设定每页显示记录数目(默认为每页显示10条记录)
* 创建日期:(2001-7-23 10:19:06)
* @param pagenumber int
*/
public void setPageSize(String size)
{
if (size.trim().length() == 0)//检查输入参数是否为空
{
this.intPageSize = 10;
} else if (size.trim().length() != 0)
{
this.intPageSize = Integer.parseInt(size);
}
if (this.intPageSize < 1)
this.intPageSize = 10;}//检索返回字段:
public void setSqlParam(String param)
{
if (param.trim().length() != 0)//检查输入参数是否为空
{
this.sqlparam = param.trim();
}}
/**
* 此处插入方法说明。
* 取得sql语句的检索条件
* 创建日期:(2001-7-23 10:00:30)
* @param sqlstr java.lang.String
*/
public void setSqlstr(String str)
{
if (str.trim().length() != 0) //检查输入参数是否为空
{
this.sqlstr = str.trim();
} else
this.sqlstr = new String(" ");
}
/**
* 此处插入方法说明。
* 设定检索数据表。
* 创建日期:(2001-7-24 10:41:51)
* @param tablename java.lang.String
*/
public void setTable(String table)
{if (table.trim().length() != 0) //检查输入参数是否为空
{
this.tablename = table.trim();
}
}
}
前端调用如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page contentType="text/html;charset=GB2312" import="java.util.*,fawBean.PagesBean"%>
<html>
<head>
<title>pages bean</title>
</head><body><% PagesBean pb = new PagesBean();
pb.setPageSize("10");
pb.setTable("speedfaw.fawonline_ticket_train");
pb.setSqlParam("sfz,zdz");
pb.setPage("1");
pb.setParamCount("2");
String teststring=pb.selectstr();
out.println(teststring);Vector myvector=pb.getData();
out.println(myvector.size());
int rowcount=pb.getRowCount();
out.println(rowcount);
int pagecount=pb.getPageCount();
out.println(pagecount);
%>
</body>
</html>返回的三个数为0,17,2
package fawBean;
import java.util.*;
import java.io.*;
import java.sql.*;
import fawBean.*;public class PagesBean
{
int intPage; //当前页码
int intPageSize; //每页记录数
int intRowCount; //总记录数
int intPageCount ; //总页码数
String tablename; //数据表名
String sqlstr; //sql语句的检索条件
String sqlparam; //选取参数
int paramcount;//字段的个数 //取的记录集,返回为hashtable
public Vector getData()
{
Vector returndata=new Vector();
Hashtable returnrow = new Hashtable();
Connection conn = null;
try
{
String selectsql;
Linkdb db=new Linkdb();
// conn = LocalPool.getConnection(); //连接数据库
int RowCount = rowcount();
selectsql = selectstr();
intPageCount = (RowCount + intPageSize - 1) / intPageSize; //总页码数
//PreparedStatement pstmt = conn.prepareStatement(selectsql);
ResultSet rs = db.executeQuery(selectsql);
if (intPage > RowCount)
intPage = intPageCount; //输入页码数大于总页码数的处理 if (intPageCount > 0)
{
int startrow = (intPage - 1) * intPageSize + 1; //开始显示记录数
for (int i = 0; i < startrow; i++)
{
rs.next();
} //将记录指针定位到待显示页的第一条记录上 //判断字段数据类型
//date型 返回 93
//int型 返回 2
//String型 返回 12
//ResultSetMetaData columnType = rs.getMetaData();
//int t = 0;
//System.out.println("type=" + columnType.getColumnType(1));
//if (columnType.getColumnType(1) == 12)
//{ //输出数据
int i = 0; while (i < intPageSize && !rs.isAfterLast())
{
for(int j=0;j<paramcount;j++)
{
//String ResultSet = rs.getString(1); //获取数据写入hashtable
returnrow.put(new Integer(j),rs.getString(j));
}
rs.next();
i++; returndata.add(returnrow);
}
} }
catch (SQLException ex)
{
System.out.print("错误=");
ex.printStackTrace(System.out);
}
return returndata;
}//返回总页码数:
public int getPageCount()
{
return intPageCount;
}
//返回总行数:
public int getRowCount()
{return intRowCount;
}
//返回记录总数:public int rowcount()
{
Connection conn = null;
Linkdb db=new Linkdb();
try
{
String countsql; //sql语句计算记录总数
if (sqlstr == null)
{
countsql = new String("select count(*) " + " from " + tablename);
} else
{
countsql =
new String("select count(*) " + " from " + tablename + " where " + sqlstr);
}
//conn = LocalPool.getConnection(); //连接数据库
//PreparedStatement pstmt = conn.prepareStatement(countsql);
ResultSet rs = db.executeQuery(countsql);
rs.next();
intRowCount = rs.getInt(1); //总记录数
rs.close();
//pstmt.close();
//conn = null;} catch (Exception ex)
{
System.out.println("错误!");}
return intRowCount;
}//返回查询的sql 语句:public String selectstr()
{
String sql;
if (sqlstr == null)
{
sql = new String("select " + sqlparam + " from " + tablename);
} else
{
sql =
new String(
"select " + sqlparam + " from " + tablename + " where " + sqlstr);
}
return sql;
}
//字段个数的设置:
public void setParamCount(String count)
{
this.paramcount=Integer.parseInt(count);
}
public int getParamCount()
{
return paramcount;
}//当前页码的取得:public void setPage(String page)
{
if (page.trim().length() == 0)//检查输入参数是否为空
{
this.intPage = 1;
} else if (page.trim().length() != 0)
{
this.intPage = Integer.parseInt(page);
}
if (this.intPage < 1)
this.intPage = 1;}
/**
* 此处插入方法说明。
* 设定每页显示记录数目(默认为每页显示10条记录)
* 创建日期:(2001-7-23 10:19:06)
* @param pagenumber int
*/
public void setPageSize(String size)
{
if (size.trim().length() == 0)//检查输入参数是否为空
{
this.intPageSize = 10;
} else if (size.trim().length() != 0)
{
this.intPageSize = Integer.parseInt(size);
}
if (this.intPageSize < 1)
this.intPageSize = 10;}//检索返回字段:
public void setSqlParam(String param)
{
if (param.trim().length() != 0)//检查输入参数是否为空
{
this.sqlparam = param.trim();
}}
/**
* 此处插入方法说明。
* 取得sql语句的检索条件
* 创建日期:(2001-7-23 10:00:30)
* @param sqlstr java.lang.String
*/
public void setSqlstr(String str)
{
if (str.trim().length() != 0) //检查输入参数是否为空
{
this.sqlstr = str.trim();
} else
this.sqlstr = new String(" ");
}
/**
* 此处插入方法说明。
* 设定检索数据表。
* 创建日期:(2001-7-24 10:41:51)
* @param tablename java.lang.String
*/
public void setTable(String table)
{if (table.trim().length() != 0) //检查输入参数是否为空
{
this.tablename = table.trim();
}
}
}
前端调用如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page contentType="text/html;charset=GB2312" import="java.util.*,fawBean.PagesBean"%>
<html>
<head>
<title>pages bean</title>
</head><body><% PagesBean pb = new PagesBean();
pb.setPageSize("10");
pb.setTable("speedfaw.fawonline_ticket_train");
pb.setSqlParam("sfz,zdz");
pb.setPage("1");
pb.setParamCount("2");
String teststring=pb.selectstr();
out.println(teststring);Vector myvector=pb.getData();
out.println(myvector.size());
int rowcount=pb.getRowCount();
out.println(rowcount);
int pagecount=pb.getPageCount();
out.println(pagecount);
%>
</body>
</html>返回的三个数为0,17,2
hashtable的数据(可能是clear把),否则,vector中只有一个hashtable!
你在bean中打印一下hasttable和vector的size,看到迪有没得到值!
回在后台打出信息!
你用的web服务器是什么?weblogic?tomcat?jrun?
package whc.skyline;/**
* Title: 分页主程序
* Description:
* Copyright: Copyright (c) 2002
* Company:
* @author skyline
* @version 1.0
*/
import java.util.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import whc.skyline.*;public class Pagi
{
ResultSet CountTopicrs=null; //初始化总记录数Rs变量
ResultSet Pagirs=null; //初始化分页时每页的记录集数Rs变量private int intCountTopic=0; //主题总数,即select选出的、库中所有记录总数
public int intPageSize; //每页显示主题数,即每页显示的记录总数
public int intPageCount; //总页数
public int intPage=0; //当前页数
private String Countsql=null,Pagisql=null,str=null,str_where=null;
private String str_parameter="";
//public static int pages_n=1; //传分页参数值private String nowPage; //初始化当前页intPage变量,以准确便获取当前页,即获取当前页的具体页号。
private String HttpFile; //当前的地址栏的文件,即具体jsp文件。Linkdb db = new Linkdb();//连接数据库//接收传分页参数
public void setPages(int n)
{
intPageSize = n;
}/*功能:接收参数组织SQL语句
*str_table :分页显示的表名
*str_where:分页的where条件
*httpfile :具体jsp文件
*pages :获取地址栏传过来的pages参数
*/
public ResultSet setQuerysql(String str_table,String str_where, String httpfile,String pages)throws SQLException
{
ResultSet r=null;
this.nowPage=pages;
this.HttpFile=httpfile;//分页文件名
Countsql="select count(*) from "+str_table+" "+str_where;
Pagisql="select * from "+str_table+" "+str_where;
try{
r=querySql(Countsql,Pagisql);
}catch(SQLException _ex)
{System.out.println(_ex);}
return r;
}/*功能:接收参数进行首尾页判断
*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");//由参数HttpServletRequest request传递而来if (nowPage==null)
{ intPage=1; }
else
{
intPage=Integer.parseInt(nowPage);
if (intPage<1)
intPage=1;
}//end else//获取总记录数的结果集。
CountTopicrs=db.executeQuery(Countsql);
if (CountTopicrs.next())
{
intCountTopic=CountTopicrs.getInt(1); //获取第一个字段的整型
}
//获取总页数。
intPageCount = (intCountTopic+intPageSize-1)/intPageSize;
//如果当前页大于总页数,则当前页等于总页数。//=最后一页
if (intPage>intPageCount)
{
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) &&(i<=intPage*intPageSize))
// {
// boodata=true;
// }
// } //endwhile.
// }//end try.
// catch(Exception e){
// System.out.println(e.toString());
// }
// } //endif.
// return boodata;
// } //end getData();//设置分页参数
public void setPfoot(String str)
{
this.str_parameter+=str;
}//分页栏函数。
public String PageFooter() {
String str = "";
int next, prev;
prev=intPage-1;
next=intPage+1;
str +="<font style='font-size: 9pt'>总计<font color='red'>"+getCountTopic()+"</font>条记录,"+"【共<font color='red'>"+getPageCount()+"</font>页】";
str +="【条"+intPageSize+"/页】 当前第<font color='red'>"+getIntPage()+"</font>页(列出第"+((intPageSize*getIntPage()+1)-intPageSize)+"到第"+(getIntPage()*intPageSize)+"条) ";//getIntPage()*intPageSize
if(intPage>1)
str += " <A href=" + HttpFile + "?pages=1"+str_parameter+">第一页</A> ";
else str += " 第一页 ";if(intPage>1)
str += " <A href=" + HttpFile + "?pages=" + prev +str_parameter+ ">上一页</A> ";
else str += " 上一页 ";if(intPage<intPageCount)
str += " <A href=" + HttpFile + "?pages=" + next +str_parameter+ ">下一页</A> ";
else str += " 下一页 ";if(intPageCount>1&&intPage!=intPageCount)
str += " <A href=" + HttpFile + "?pages=" + intPageCount +str_parameter+ ">最后页</A>";
else str += " 最后页 </font>";
str +=" 转到<INPUT TYPE='text'NAME='go' size='2'>页 <input type='submit' name='Submit' value='go'>";
return str;
}
//关闭数据库连接
public void closeConn()
{
db.closeStmt();
db.closeConn();
}} //end.
package whc.skyline;import java.sql.*;
/**
* Title: 数据库底层连接
* Description:
* Copyright: Copyright (c) 2002
* Company:
* @author skyline
* @version 1.0
*/
public class Linkdb {
String strDriver="sun.jdbc.odbc.JdbcOdbcDriver";//加载驱动程序
String strConn="jdbc:odbc:dbserver";
private Connection conn = null;
private Statement stmt = null; //执行SQL语句
ResultSet rs = null;public Linkdb()
{
try
{
Class.forName(strDriver).newInstance(); //**newInstance()什么意思?**//
} catch (Exception e) {
System.err.println("不能连接数据库!"+e.getMessage());
}
}//执行Select语句
public ResultSet executeQuery(String sql) {
try {
conn = DriverManager.getConnection(strConn,"sa","sa"); //建立与数据源之间的连接
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) {
try {
conn = DriverManager.getConnection(strConn,"sa","sa");
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();
}
}
}
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.sql.*, whc.skyline.*" %>
<%
/**
* Title: 分页jsp程序
* Description: 动态分页显示,只需向Pagi.class传入表名及where 查询条件即可
* Copyright: Copyright (c) 2002
* Company:
* @author skyline
* @version 1.0
*/
%>
<%
String nowPage="";
String str_where="";//设置查询条件,默认值为空
String footer="";
String field_1="",field_2="",field_3="",field_4="";
%>
<jsp:useBean id="pagi" scope="page" class="whc.skyline.Pagi" />
<html>
<head></head>
<body><table width="70%" align='center'><tr></td><b>分页显示效果:</b></td></tr></table>
<table width=70% border='1' cellspacing='0' cellpadding='0' align='center' bordercolorlight='#000000' bordercolordark='#FFFFFF'>
<%
nowPage=request.getParameter("pages"); //获取地址栏传过来的pages参数
if (nowPage==null||nowPage.equals("null"))
nowPage="0"; //将当前页的具体页号置为0
pagi.setPages(5); //设置分页的每页条数
ResultSet rs = pagi.setQuerysql("a_test2","str_where","page.jsp",nowPage);
footer = pagi.PageFooter(); //读分页栏
//输出表头
out.print("<tr><td>序号</td><td>姓名</td><td>性别</td><td>邮箱</td></tr>");
try{
if (pagi.intPageCount>0)
{
int i=0;
while (rs.next())
{
i++; if (i>((pagi.intPage-1)*pagi.intPageSize) &&(i<=pagi.intPage*pagi.intPageSize))
{
field_1=rs.getString(1)+"";
field_2=rs.getString(2)+"";
field_3=rs.getString(3)+"";
field_4=rs.getString(4)+"";
%>
<tr><td><%=field_1%></td><td><%=field_2%></td><td><%=field_3%></td><td><%=field_4%></td></tr>
<%
}//end if
} //end while
} //end if
rs.close();
} catch(Exception e)
{out.println(e.getMessage());}
finally
{pagi.closeConn();}
out.print("</table>");
out.println("<table border=0 width='70%' cellspacing='0' cellpadding='0' align='center' bordercolorlight='#000000' bordercolordark='#FFFFFF'><tr><td colspan=4 align=center>"+footer+"</td></tr>");
%>
</table>
</body>
</html>