Cache和IRIS 数据库 分页查询(指定起始页)

全网几乎没有Cache数据库和IRIS数据库的分页查询(指定起始页),因此排了不少坑总结了可实行的方案。

一、Cache数据库分页查询(指定起始页)

Cache分页查询的参考文章
参考文章一
参考文章二

 /**
     * (只有2011.1版本以后的cache数据库支持%VID分页查询)(2011版本之前的cache数据库建议直接放弃指定起始页分页查询)
     * 采用分页查询升序方式,获取指定表的主键或索引字段下的数据
     * @param dataBaseName  数据库名称
     * @param schemaName schema名称
     * @param tableName  表名称
     * @param sortingField  排序字段,主键或者索引字段
     * @param connection 数据库连接
     * @param startPosition  每一页的起始查询位置
     * @param singlePageLength  每页获取多少条数据
     * @return
     * @throws Exception
     */
    @Override
    public Map<String, JSONObject> pagingQuerySample(String dataBaseName, String schemaName, String tableName,
                                                     String sortingField, Object connection, long startPosition, Integer singlePageLength) throws Exception{
        String sql = "";
        ResultSet rs = null;
        PreparedStatement preStmt = null;
        Map<String, JSONObject> resultMap;
        try{
            if(StringUtil.isNotEmpty(sortingField)){
                // 构造查询sql
                sql = String.format("SELECT *, %VID FROM (SELECT TOP ALL * FROM %s.%s ORDER BY %s) WHERE %VID BETWEEN %s AND %s",schemaName,
                        tableName, sortingField, startPosition+1, singlePageLength + startPosition + 1);
            }else {
                sql = String.format("SELECT *, %VID FROM (SELECT TOP ALL * FROM %s.%s ) WHERE %VID BETWEEN %s AND %s",schemaName,
                        tableName, startPosition+1, singlePageLength + startPosition + 1);
            }

            preStmt = ((Connection)connection).prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            rs = preStmt.executeQuery();

            resultMap = ResultSetUtil.getMapResultSet(rs, 0);

            return resultMap;

        }catch (Exception e){
            e.printStackTrace();
            LOGGER.error("分页查询数据失败,失败原因是:", e);
            return null;
        }finally {
            // 关闭资源
            try {
                if (rs != null) {
                    rs.close();
                }
                if (preStmt != null) {
                    preStmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }


    }

二、IRIS数据库分页查询(指定起始页)

 /***
     * 分页查询数据
     * @param dataBaseName  数据库名称
     * @param schemaName schema名称
     * @param tableName  表名称
     * @param sortingField  排序字段,主键或者索引字段
     * @param connection 数据库连接
     * @param startPosition  每一页的起始查询位置
     * @param singlePageLength  每页获取多少条数据
     * @return
     */
    @Override
    public Map<String, JSONObject> pagingQuerySample(String dataBaseName, String schemaName, String tableName,
                                                     String sortingField, Object connection, long startPosition ,Integer singlePageLength) throws Exception{
        PreparedStatement preStmt = null;
        ResultSet rs = null;
        // 封装结果集
        Map<String, JSONObject> resultMap = new HashMap<>(16);
        // 查询sql
        String sql = String.format("select *, %s from (select top all * from %s.%s ", "%VID", schemaName, tableName);
        if(StringUtil.isNotEmpty(sortingField)){
            sql = sql + String.format("order by %s ASC ", sortingField);
        }
        sql = sql + String.format(") where %s between %d and %d", "%VID", startPosition, startPosition + singlePageLength);
        try {
            if (StringUtil.isNotEmpty(sql))	{
                preStmt = ((Connection)connection).prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
                rs = preStmt.executeQuery();
                resultMap = ResultSetUtil.getMapResultSetTeredata(rs, singlePageLength);
            }
            return resultMap;
        } catch (SQLException e) {
            e.printStackTrace();
            throw e;
        }
        finally {
            try{
                if(rs != null) {
                    rs.close();
                }
                if(preStmt != null) {
                    preStmt.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值