首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于分页,小弟我的想法

2012-02-17 
关于分页,我的想法我认为分页的原理大概有2种1个是一次性的把结果集放到Vector然后对这个数组进行分页这个

关于分页,我的想法
我认为分页的原理大概有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   =   sta.executeQuery(sql);
}catch(Exception   e)
{
e.printStackTrace();


}
return   res   ;
}

public   static   int   initSearch(String   sql)
{
Connection   conn   =   null   ;
Statement   sta   =   null   ;
ResultSet   res   =   null   ;
int   i   =   0   ;
try
{
conn   =   DbUtil.connectToDb();
sta   =   conn.createStatement()   ;
res   =   sta.executeQuery(sql);
while(res.next())
{
i++   ;
}
}catch(Exception   e)
{
e.printStackTrace();
}
return   i   ;
}


}
PhoneInfoBean.java
主要有search和initSearch   2个方法   search方法用于通过传近来的sql返回结果集   initSearch返回总记录数
__________________________________________________________________________
//Created   by   MyEclipse   Struts
//   XSL   source   (default):   platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_4.1.1/xslt/JavaClass.xsl

package   com.lby.struts.action;

import   javax.servlet.http.HttpServletRequest;
import   javax.servlet.http.HttpServletResponse;
import   javax.servlet.http.HttpSession;

import   org.apache.struts.action.Action;
import   org.apache.struts.action.ActionForm;
import   org.apache.struts.action.ActionForward;
import   org.apache.struts.action.ActionMapping;

import   com.lby.Constants;
import   com.lby.PhoneInfoBean;
import   com.lby.struts.form.IndexForm;

/**  
  *   MyEclipse   Struts
  *   Creation   date:   05-26-2007
  *  
  *   XDoclet   definition:
  *   @struts.action   path= "/index "   name= "indexForm "   input= "/index.jsp "   scope= "request "   validate= "true "
  *   @struts.action-forward   name= "index "   path= "/index.jsp "
  */
public   class   IndexAction   extends   Action   {

//   ---------------------   Instance   Variables

//   ---------------------   Methods

/**  
  *   Method   execute
  *   @param   mapping
  *   @param   form
  *   @param   request
  *   @param   response
  *   @return   ActionForward
  */
public   ActionForward   execute(
ActionMapping   mapping,
ActionForm   form,
HttpServletRequest   request,
HttpServletResponse   response)   {
IndexForm   indexForm   =   (IndexForm)   form;
//   TODO   Auto-generated   method   stub
String   call_type   =   indexForm.getCall_type()   ;
String   page   =   indexForm.getPage()   ;
int   i   =   Integer.parseInt(page);
String   sql   =   "select   *   from   call_glide_tmp   where   call_type   =   ' "+call_type+ " ' ";
int   all_lines   =   PhoneInfoBean.initSearch(sql);

HttpSession   session   =   request.getSession();
session.setAttribute( "call_type ",call_type);
session.setAttribute( "all_lines ", " "+all_lines);


session.setAttribute( "sql ",sql);
session.setAttribute( "page ",page)   ;
return   mapping.findForward( "search ");
}

}

IndexAction.java
负责生成sql语句,
调用PhoneInfoBean.initSearch(sql)得到全部行数
并且把sql   ,all_lines   ,   call_type(这个是查询的关键字)   ,   page(这个初始页数)
保存到session中   跳转到search.jsp
___________________________________________________________________________




[解决办法]
那要是有图片也要放到数据库怎么办,数据库承受得了么;

热点排行