可以自己设计一个类,里面的属性有:搜索的总记录数,每页显示的记录数,当前申请的页数。 可以看看这个:package common; import java.sql.*; import java.util.*; import db.DBPool;public class PageObj { public int p_intPrePage=0; public int p_intPageCount=1; public int p_intCurPage=1; public int p_intRecordCount=0; public PageObj() { p_intPrePage=15;//每页默认的记录数为15条 p_intCurPage=1; p_intPageCount=1; p_intRecordCount=0; } //设定每页的记录数 public void setPrePage(int v_intPrePage) { if(v_intPrePage>0) p_intPrePage=v_intPrePage; }
public Object[] JspPageData(String v_strSQL, int v_intGotoPage) { Object[] f_Objects=null; ResultSet f_ResultSet=null; Statement f_Statement=null; Connection f_Con=DBPool.getConn();
int f_intToPage=1; if (v_intGotoPage>p_intPageCount) { f_intToPage=p_intPageCount; p_intCurPage=p_intPageCount; } else { f_intToPage=v_intGotoPage; p_intCurPage=v_intGotoPage; } try { f_Statement=f_Con.createStatement(); f_ResultSet=f_Statement.executeQuery(v_strSQL);
可以看看这个:package common;
import java.sql.*;
import java.util.*;
import db.DBPool;public class PageObj
{
public int p_intPrePage=0;
public int p_intPageCount=1;
public int p_intCurPage=1;
public int p_intRecordCount=0;
public PageObj()
{
p_intPrePage=15;//每页默认的记录数为15条
p_intCurPage=1;
p_intPageCount=1;
p_intRecordCount=0;
}
//设定每页的记录数
public void setPrePage(int v_intPrePage)
{
if(v_intPrePage>0)
p_intPrePage=v_intPrePage;
}
public Object[] JspPageData(String v_strSQL, int v_intGotoPage)
{
Object[] f_Objects=null;
ResultSet f_ResultSet=null;
Statement f_Statement=null;
Connection f_Con=DBPool.getConn();
int f_intToPage=1;
if (v_intGotoPage>p_intPageCount)
{
f_intToPage=p_intPageCount;
p_intCurPage=p_intPageCount;
}
else
{
f_intToPage=v_intGotoPage;
p_intCurPage=v_intGotoPage;
}
try
{
f_Statement=f_Con.createStatement();
f_ResultSet=f_Statement.executeQuery(v_strSQL);
f_Objects=RetObjHashMap(f_ResultSet,f_intToPage);
f_ResultSet.close();
f_Statement.close();
f_Con.close();
}
catch(Exception E)
{
System.out.println("JspPageData.err:="+E.getMessage());
}
return f_Objects;
}
private Object[] RetObjHashMap(ResultSet v_Rs,int v_intToPage)
{
int position=0;
ResultSet f_Rs=v_Rs;
try
{
Vector f_Results=new Vector();
Vector f_ColumNames=GetColumNames(f_Rs);
for(int f_intF=0;f_intF<(v_intToPage-1)*p_intPrePage;f_intF++)
{
f_Rs.next();
}
for(int f_intK=0;f_intK<p_intPrePage;f_intK++)
{
if(f_Rs.next())
{
HashMap f_Row=new HashMap();
for(int f_x=0;f_x<f_ColumNames.size();f_x++)
{
String f_columName=(String)f_ColumNames.elementAt(f_x);
String f_Value=f_Rs.getString(f_columName);
if(f_Value==null)
{
f_Value=new String("");
}
else
{
while ((position = f_Value.indexOf("\r\n",position)) !=-1 )
{
f_Value = f_Value.substring(0,position)+"<br>"+f_Value.substring(position+2);
}
}
f_Row.put(f_columName,f_Value);
}
f_Results.addElement(f_Row);
}
}
return f_Results.toArray();
}
catch (Exception E)
{
System.out.println("DBObj.RetObjHashMap Err="+E.getMessage());
return null;
}
}
//返回总页数,
//传入的参数 v_strPageCountSQL 查询总记录数的SQL语句
//v_strPageCountSQL 的形式为:from Table where 从from 开始
public int retPageCount(String v_strPageCountSQL)
{
try
{
p_intPageCount=1;
Connection f_con=DBPool.getConn();
ResultSet f_Rst=null;
int f_intTotalCount=0;
String f_strQ="select count(*) as count "+v_strPageCountSQL;
Statement f_strMT=f_con.createStatement();
f_Rst=f_strMT.executeQuery(f_strQ);
f_Rst.next();
f_intTotalCount=f_Rst.getInt("count");
p_intRecordCount=f_intTotalCount;
if (f_intTotalCount>0)
{
int f_intPgc=f_intTotalCount%p_intPrePage;
if (f_intPgc==0)
{
p_intPageCount=f_intTotalCount/p_intPrePage;
}
else
{
p_intPageCount=f_intTotalCount/p_intPrePage+1;
}
}
}
catch (Exception E)
{
System.out.println("retPageCount.Err"+E.getMessage());
}
return p_intPageCount;
}
// retrun columnames
public Vector GetColumNames(ResultSet v_rs)
{
try
{
ResultSetMetaData f_md = v_rs.getMetaData();
int f_intCount = f_md.getColumnCount();
Vector f_columnNames = new Vector(f_intCount);
for(int x = 0; x < f_intCount; x++)
{
f_columnNames.addElement(f_md.getColumnName(x + 1));
}
return f_columnNames;
}
catch (Exception E)
{
System.out.println("GetColumNames"+E.getMessage());
}
return null;
}
}
package db;import java.sql.Connection;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.*;
public class DBPool
{
public static Connection getConn()
{
Connection conn=null;
try
{
Context ctx=new InitialContext();
if ( ctx == null )
throw new Exception("no match environment");
DataSource ds=(DataSource)ctx.lookup("dbwpool");
ctx.close();
if(ds==null)
throw new Exception("no match database");
conn = ds.getConnection();
}
catch (Exception e)
{
System.out.println("DBPool.getConn() throw a exception :" + e.getMessage());
}
return conn;
}
}
首先我用一个方法将大标题 "选择" 查询出来 返回结果ArrayList对象
然后根据大标题的ID为参数查询 "每小题的题目" 返回结果ArrayList对象
再以每小题的题目ID为参数查询 "选项内容" 即A. 返回结果ArrayList对象
B.
C.
D. 三种不同的数据都用三个bean保存起来,再分别用ArrayList集合把三个bean add(),那么应该用什么样的方法将这三个综合起来显示上面的结果
当前页为currPage页(如第五页)
每页显示pageSize条(如20条)
然后用一个循环
在currPage页只需要从数据库里面读取从
(currPage-1)*pageSize + 1
到
(currPage)*pageSize
的数据
则刚才的假设情况下,就从数据库读取第81条到100条记录就可以了
没有必要将结果完全返回,而且这样代价也比较大……
如果返回结果太多………………