Sybase数据库分页查询(指定起始位置)

news2024/11/24 22:54:00

针对单表数据量过大的场景,分页查询必不可少。针对sybase数据库分页查询的案例全网稀少,特别是指定起始页的分页查询实现。
本文依靠实际开发场景,特此总结Sybase数据库分页查询(指定起始位置)。

目录

  • 一、 SQL实现分页查询(指定起始页)
    • 1. 查看表数据
    • 2. 创建临时表
    • 3. 临时表中分页查询,升序
    • 4. 删除临时表(建议删除,避免资源占用)
  • 二、代码实现 (指定起始页)

一、 SQL实现分页查询(指定起始页)

1. 查看表数据

在这里插入图片描述

2. 创建临时表

在这里插入图片描述

3. 临时表中分页查询,升序

在这里插入图片描述

4. 删除临时表(建议删除,避免资源占用)

在这里插入图片描述

二、代码实现 (指定起始页)

 /**
     * sybase暂无合适的分页方案,全查
     * @param dataBaseName  数据库名称
     * @param schemaName schema名称
     * @param tableName  表名称
     * @param sortingField  排序字段,主键或者索引字段
     * @param connection 数据库连接
     * @param startPosition  每一页的起始查询位置
     * @param singlePageLength  每页获取多少条数据
     * @return
     * @throws Exception
     */
    
    public Map<String, JSONObject> pagingQuerySample(String dataBaseName, String schemaName, String tableName,
                                                       String sortingField, Object connection, long startPosition, Integer singlePageLength) throws Exception{
        String sqlOne = "";
        String sqlTwo = "";
        String sqlThree = "";
        ResultSet rs = null;
        PreparedStatement preStmt = null;
        Map<String, JSONObject> resultMap = null;
        try{
            // sybase不支持复杂子查询,需拆分两步

            // 创建临时表#delTmp_tb,复制原始表数据并新增字段dlprownum
            sqlOne = String.format("select * , dlprownum=identity(10) into #delTmp_tb from %s.[%s]",schemaName, tableName);
            ((Connection)connection).prepareStatement(sqlOne).executeUpdate();


            // 临时表中分页查询,升序
            sqlTwo = String.format("select * from #delTmp_tb where dlprownum between %s and %s order by dlprownum ASC",startPosition, startPosition+singlePageLength - 1);
            preStmt = ((Connection)connection).prepareStatement(sqlTwo, ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);

            // 组装结果
            rs = preStmt.executeQuery();
            resultMap = ResultSetUtil.getMapResultSetForSybase(rs);

            // 删除临时表
            sqlThree = String.format("DROP TABLE #delTmp_tb");
            ((Connection)connection).prepareStatement(sqlThree).executeUpdate();

        }catch (Exception e){
            e.printStackTrace();
            LOGGER.error("分页查询数据失败,失败原因是:", e);
        }finally {
            // 关闭资源
            try {
                if (rs != null) {
                    rs.close();
                }
                if (preStmt != null) {
                    preStmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return resultMap;
    }
/**
     * 组装Sybase分页查询结果
     * @param rs 分页查询结果
     * @return SQLResultSet
     */
    public static Map<String, JSONObject> getMapResultSetForSybase(ResultSet rs)
    {
        try {
            Map<String, JSONObject> resultMap = new HashMap<>(16);
            if(null==rs){
                return resultMap;
            }
            ResultSetMetaData resultMetaData = rs.getMetaData();
            List<JSONObject> columnJsonList = new ArrayList<>();
            int size = resultMetaData.getColumnCount();
            //TODO 获取所有列名称
            for(int i=1;i<=size;i++) {
                JSONObject jsonObject = new JSONObject(2);
                jsonObject.put("columnName",resultMetaData.getColumnName(i));
                jsonObject.put("columnType",resultMetaData.getColumnTypeName(i));
                columnJsonList.add(jsonObject);
            }
            for (JSONObject jsonObject : columnJsonList) {
                if (null != jsonObject){
                    String columnName = jsonObject.getString("columnName");
                    String columnType = jsonObject.getString("columnType");
                    if (StringUtil.isEmpty(columnName) || StringUtil.isEmpty(columnType)){
                        continue;
                    }
                    // 针对特殊类型的字段不进行处理
                    if (columnType.toLowerCase().contains("blob") || columnType.toLowerCase().contains("clob")
                            || columnType.toLowerCase().contains("long varchar") || columnType.toLowerCase().contains("long vargraphic")
                            || columnType.toLowerCase().contains("numeric")){
                        continue;
                    }
                    JSONObject resultJson = new JSONObject(2);
                    List<String> columnValues = new ArrayList<>();
                    while(rs.next()) {
                        try {
                            String columnValue = rs.getString(columnName);
                            if (StringUtil.isNotEmpty(columnValue)){
                                columnValues.add(columnValue);
                            }
                        } catch (Throwable ignored) {

                        }
                    }
                    resultJson.put("columnSize",columnValues.size());
                    resultJson.put("columnData",columnValues);

                    resultMap.put(columnName,resultJson);
                    //TODO 游标置位
                    rs.beforeFirst();
                }
            }
            return resultMap;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1660497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

G.AB路线【蓝桥杯】/bfs+可重复走

AB路线 bfs可重复走 思路&#xff1a;本题和传统的bfs题目不同&#xff0c;本题为了满足题目先走K个A再走K个B&#xff0c;可能需要重复走某个格子才能继续走下去&#xff0c;故vis数组可以多开一维&#xff0c;vis[x][y][z]表示第z次走到x行y列这种情况是否出现过 A A A B B …

最新版在线客服系统源码

源码介绍 首发最新在线客服系统源码&#xff0c;优化更好并且重构源码布局UI 性能不吃cpu并发快,普通1H2G都能带动最新版只要是服务器都能带动 搭建即可使用,操作简单,易懂 修复了老版本bug 内附有搭建教程 gofly.v1kf.com 运行环境 Nginx 1.20 MySQL 5.7 演示截图

搜索的未来:OpenAI 的 GPT 如何彻底改变行业

搜索的未来&#xff1a;OpenAI 的 GPT 如何彻底改变行业 概述 搜索引擎格局正处于一场革命的风口浪尖&#xff0c;而 OpenAI 的 GPT 处于这场变革的最前沿。最近出现了一种被称为“im-good-gpt-2-chatbot”的神秘聊天机器人&#xff0c;以及基于 ChatGPT 的搜索引擎的传言&am…

MySQL企业级开发重点之事物和索引

事物 -- 解散学工部 delete from tb_dept where id 1;-- 删除部门下的员工 delete from tb_emp where dept_id 1; 介绍和操作 我们应该将两个语句写成一个语句 -- 开启事物 start transaction ;-- 解散学工部 delete from tb_dept where id 3;-- 删除部门下的员工 delete fr…

开源框架平台:功能优势多,助力数字化转型!

伴随着科技越来越发达&#xff0c;低代码技术平台、开源框架平台逐渐在各中小型企业里获得重视和青睐&#xff0c;成为助力企业实现流程化办公&#xff0c;进入数字化转型的的有力武器。在众多服务商中&#xff0c;谁拥有市场竞争力&#xff0c;谁在服务和产品方面更具核心价值…

ASP.NET网上图书订阅系统的设计

摘 要 网上图书订阅系统基于 Microsoft SQL Server 2000和ASP.NET平台&#xff0c;以C#为编程语言开发,实现了网上图书预订和借阅&#xff0c;订阅信息查询&#xff0c;图书和用户信息的修改&#xff0c;借阅排行和新到图书的查询等功能&#xff0c;这样不但可将管理员从繁重…

鸿蒙ArkUI-X跨平台开发电商应用

一、ArkUI-X 简介 ArkUI-X 是由 OpenHarmony TSC - 跨平台应用开发框架 TSG 所孵化的开源项目,使用ArkUI-X可以让开发者基于一套主代码, 就可以构建支持多平台的精美、高性能应用。目前支持OpenHarmony、HarmonyOS、Android、 iOS,后续会逐步增加更多平台支持。 ArKUI跨平台…

5款AI工具推荐

当下AI大行其道&#xff0c;各种神奇的工具层出不穷。除了ChatGPT、Midjourney等耳熟能详的明星产品&#xff0c;还有不少可圈可点的AI应用值得一提。 Kimi 这是一款基于GPT技术的国产对话AI&#xff0c;对中文的理解和生成能力相当出色。不管是闲聊对话&#xff0c;还是应对…

SQL编程 (变量的定义与使用)

一、标识符的命名规范 1不能数字开头 2不允许保留关键字 3符号只允许_或$ 二、变量的声明 set用于声明变量&#xff0c;update声明修改的表&#xff0c;set是声明修改的列。 set userName大聪明; select userName as 名称; 可以简便的统写为 set userName:大聪明; 先建…

Hive Windows Functions 窗口函数

Hive Windows Functions 窗口函数 在 Hive 中&#xff0c;窗口函数&#xff08;Window Functions&#xff09;用于在查询结果中执行聚合、排序和分析操作&#xff0c;而无需将数据分组。窗口函数允许你在查询结果中的一组行上执行计算&#xff0c;而不会改变原始数据的行数&am…

如何做好产业园运营?树莓集团成都数字产业园运营模式全解析

如何做好产业园运营&#xff1f;本篇将对树莓集团产业园运营模式进行介绍&#xff0c;并详情分析旗下运营代表案例&#xff0c;成都数字产业园运营——国际数字影像产业园。 树莓集团作为数字产业生态链建设者&#xff0c;秉持高效、友善、敢为的集团核心文化&#xff0c;有效链…

免费的国内版 GPT 推荐,5个国产ai工具

提起AI&#xff0c;大家第一个想到的就是GPT。 虽然它确实很厉害&#xff0c;但奈何于我们水土不服&#xff0c;使用门槛有些高。 不过随着GPT的爆火&#xff0c;现在AI智能工具已经遍布到各行各业了&#xff0c;随着时间的推移&#xff0c;国内的AI工具也已经“百花盛放”了…

ImportError: cannot import name ‘compare_mse‘ from ‘skimage.measure‘

问题描述 在复现模型代码的时候遇到错误&#xff1a;ImportError: cannot import name compare_mse from skimage.measure 。 解决方案 这是由于 scikit-image 的版本问题&#xff0c;由于scikit-image版本升级后就修改了库函数。 方法1&#xff08;修改scikit-image版本&…

【数据分析面试】40.20个数据开发治理基础问题

在当今数字化时代&#xff0c;数据已成为企业最重要的资产之一 。如何管理数据、确保数据的安全性和质量&#xff0c;以及如何有效地利用数据来推动业务发展&#xff0c;这些都是我们面临的挑战。 目录 数据开发基础概念1. **什么是数据字典&#xff1f;它在数据管理和数据开发…

Excel——项目管理,设置时间到期自动提醒及颜色高亮

效果图 第一步、自动获取合同到期日期 1、首先合同【签约日期】和【到期日期】下面的数据必须是日期格式&#xff0c;不能是其它的格式否则无法计算&#xff0c;如果是其它格式需要转换成标准的日期格式&#xff0c;如下图所示。 2、在“到期日期”下面的第一个单元格中输入公…

地埋式可燃气体监测终端,地下燃气管网安全“哨兵”

在现代都市的繁华之下&#xff0c;一条条地下燃气管网承载着城市的生命与活力&#xff0c;但管网老化腐蚀&#xff0c;第三方施工破坏&#xff0c;巡检维修不到位等问题&#xff0c;时刻影响着燃气管网安全运行&#xff0c;甚至威胁人民群众的生命财产安全。 为实现对燃气管网…

Mac YOLO V9推理测试(基于ultralytics)

环境&#xff1a; Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 使用YOLO一般都会接触ultralytics这个框架&#xff0c;今天来试试用该框架进行YOLO V9模型的推理。 YOLOv9目前提供了四种模型下载&#xff1a;yolov9-c.pt、yolov9-e.pt、gelan-c.p…

C++ 多态的相关问题

目录 1. 第一题 2. 第二题 3. inline 函数可以是虚函数吗 4. 静态成员函数可以是虚函数吗 5. 构造函数可以是虚函数吗 6. 析构函数可以是虚函数吗 7. 拷贝构造和赋值运算符重载可以是虚函数吗 8. 对象访问普通函数快还是访问虚函数快 9. 虚函数表是什么阶段生成的&…

Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案

文章目录 一、vue中使用el-table的typeindex有时不显示序号Table 表格显示索引自定义索引报错信息解决方案 二、vue中Missing required prop: “value” 报错报错原因解决方案 三、el-table的索引值index在翻页的时候可以连续显示方法一方法二 四、vue3中Element Plus全局组件配…

安卓开发--环境配置

本次项目选择使用 Andrio Studio 进行开发。虽然这款软件版本更新也很快。不过开发一款APP的技术流程是大差不差的。我几年前的安卓笔记放到现在还是能用。 现在CSDN网上写一个笔记留作以后参考&#xff0c;开始吧&#xff01;&#xff01;&#xff01; 1 安装 Andrio Studio …