[ECSide] ecside在基于oracle数据库层的分页中如何实现

zhangbowu 2007-10-22
我将例子迁移到ORACLE数据库中是出错。
出错的内容是sql语句的。是不支持
SELECT * FROM  WHERE 1=1 LIMIT ? OFFSET ?  形式的sql语句。
现在不知如何解决,请帮忙!!!
pharaohsprince 2007-10-22
oracle当然不行
我的解决方法:分页部分自己封装好·
然后把拼装过分页的SQL语句组装成后提交后台处理,然后再把得到的数据以及自己获取的分页信息(总数,页数等)交给ACTION,反馈到ECSIDE
ORACLE的SQL语句封装参考如下:
/**
* 生成分页SQL语句(For Oracle)
* @param sql
* @param pagination
* @return
*/
public String getPaginationSQL(String sql,Pagination pagination) {
int beginNum=(pagination.getCurrentPage()-1)*pagination.getPageRow();
StringBuffer pagingSelect = new StringBuffer();
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
pagingSelect.append(sql);
pagingSelect.append(" ) row_ where rownum <= "+pagination.getPageRow()*pagination.getCurrentPage()+") where rownum_ > "+beginNum+"");
return pagingSelect.toString();
}
pharaohsprince 2007-10-22
/**
* 获取查询总数
* @param sql
* @return
*/
public int getTotalRow(String sql) {
return this.getTotalRow(sql, null);
}
public int getTotalRow(String sql,Object[] sqlParams) {
StringBuffer Select = new StringBuffer();
Select.append("Select count(*) From ( ");
Select.append(sql);
Select.append(" )");
return this.getJdbcTemplate().queryForInt(Select.toString(), sqlParams);
}
pharaohsprince 2007-10-22
分页封装BEAN片段:
public class Pagination {
private int currentPage;
private int maxPage=1;
private int minPage=1;
private int totalPage;
private int totalRow;
private int pageRow;
private Integer beginIndex;
....
zhangbowu 2007-10-26
能不能把你的例子传一个给我,谢谢!
我的email:zhangbowu@netease.com
xjguang 2007-11-01
我也希望要个数据库分页例子。xjguang@sohu.com谢谢!
ryan1982 2008-05-09
我也需要一个数据库分页的例子
我的邮箱是pysky1980@sina.com
haray 2008-05-14
我正在用oracle,也想要你的这个例子
email:haray@sohu.com
hotice 2008-05-14
发个自己改的共通方法,需要继承spring的NamedParameterJdbcDaoSupport类
/*
	 * ECSIDE查询列表
	 * countsql:记录总数的sql
	 * querySql:查询的sql
	 * map:参数
	 */
	public List queryForEcList(HttpServletRequest request, String countsql,String querySql,Map map) {
		Limit limit = RequestUtils.getLimit(request);
		StringBuffer Sql = new StringBuffer();
		Sql.append(" SELECT * FROM (")
		   .append(" select record.*,rownum rn from (")
		   .append(querySql)
		   .append(" ) record ")
		   .append(" WHERE rownum <= :endnum ")
		   .append(" WHERE RN >= :startnum ");

		
		if(map==null){
			map = new HashMap();
		}
		
		int totalRows = RequestUtils.getTotalRowsFromRequest(request);
		if (totalRows < 0) {
			totalRows = this.getNamedParameterJdbcTemplate().queryForInt(countsql, map);
		}

		limit.setRowAttributes(totalRows, DEFAULT_PAGE_SIZE);

		int offset = 0;
		int[] rowStartEnd = new int[] { limit.getRowStart() + offset,
				limit.getRowEnd() + offset };

		map.put("endnum", String.valueOf(rowStartEnd[1]));
		map.put("startnum", String.valueOf(rowStartEnd[0]));
		return this.queryForList(querySql, map);
	}


Global site tag (gtag.js) - Google Analytics