关于分页,我的想法
我认为分页的原理大概有2种
1个是一次性的把结果集放到Vector然后对这个数组进行分页
这个可以减少数据库的连接 但浪费了内存
还有就是 每翻一页就向数据库里要一次数据
这个虽然节省了内存 数据库的连接次数又加大了
我想请教一下 有没有更好的办法
以下是我的分页的代码 为了响应MVC 我用struts做的
用的是第2中方法
因为我的数据库很大 内存很宝贵
请高手们帮我看看 这样写好不好 谢谢
________________________________________________________________________
程序的流程:
程序的入口是index.jsp
进入后输入关键字 提交到index.do
IndexAction负责生成sql语句,
调用PhoneInfoBean.initSearch(sql)得到全部行数
并且把sql ,all_lines , call_type(这个是查询的关键字) , page(这个初始页数)
保存到session中 跳转到search.jsp
连接数据库是DbUtil
PhoneInfoBean类里主要有search和initSearch 2个方法 search方法用于通过传近来的sql返回结果集 initSearch返回总记录数
search.jsp里有个DisplayTag标签 负责算法和输出
标签调用PhoneInfoBean.Search(sql)输出
我的算法是 通过传近来的page*一爷显示多少行 得到一共显示了多少行(初始page=0)
在循环里用计数器来判断如果i > = page*all_lines 就让他输出 并启动另一个计数器 另一个计数器是用来控制输出几行的
当用户点下一页的时候提交到search.do
SearchAction负责把page 和 sql 放到session中
跳转到search.jsp
________________________________________________________________________
oracle数据库
________________________________________________________________________
package com.lby;
public class Constants {
public static final int PAGE_LINES = 10 ;
public static final String DB_URL = "jdbc:oracle:thin:@127.0.0.1:1521:LIBOYANG " ;
public static final String DB_USERNAME = "mobile " ;
public static final String DB_PASSWORD = "mobile " ;
public static final String DB_DRIVER = "oracle.jdbc.OracleDriver " ;
public static final String TABLE_NAME = "call_glide_tmp ";
}
Constants.java 用于存放一些静态常量
________________________________________________________________________
package com.lby;
import java.sql.Connection;
import java.sql.DriverManager;
public class DbUtil
{
public static Connection connectToDb() throws Exception
{
Connection conn = null ;
Class.forName(Constants.DB_DRIVER) ;
conn = DriverManager.getConnection(Constants.DB_URL,Constants.DB_USERNAME,Constants.DB_PASSWORD) ;
return conn ;
}
}
DbUtil.java 用于连接数据库 放回Connrction
_______________________________________________________________________
package com.lby;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
public class PhoneInfoBean
{
public static ResultSet search(String sql)
{
Connection conn = null ;
Statement sta = null ;
ResultSet res = null ;
try
{
conn = DbUtil.connectToDb();
sta = conn.createStatement() ;
res = &nbs