[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); } |