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

