日期:2014-05-18  浏览次数:20692 次

关于分页,我的想法
我认为分页的原理大概有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