关于分页,我的想法
我认为分页的原理大概有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
___________________________________________________________________________
[解决办法]
那要是有图片也要放到数据库怎么办,数据库承受得了么;