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

针对单表数据量过大的场景,分页查询必不可少。针对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.mfbz.cn/a/609213.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL统计语句记录

1.达梦数据库 统计指定单位的12个月份的业务数据 SELECT a.DEPT_ID, b.dept_name, a.USER_NAME, count(a.dept_id) as count, sum(case when to_char(a.CREATE_TIME,yyyy-mm) 2023-01 THEN 1 else 0 end) as one,sum(case when to_char(a.CREATE_TIME,yyyy-mm) 2023-02 T…

JavaScript手写专题——图片懒加载、滚动节流、防抖手写

图片懒加载场景&#xff1a;在一些图片量比较大的网站&#xff08;比如电商网站首页&#xff0c;或者团购网站、小游戏首页等&#xff09;&#xff0c;如果我们尝试在用户打开页面的时候&#xff0c;就把所有的图片资源加载完毕&#xff0c;那么很可能会造成白屏、卡顿等现象&a…

内网安全-隧道技术SSHDNSICMPSMB上线通讯LinuxMac 简单总结

第126天&#xff1a;内网安全-隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac_内网安全-隧道技术_ssh_dns_icmp_smb_上线通讯linux_mac-CSDN博客 内网渗透—隧道技术_隧道技术csdn-CSDN博客 #SMB 隧道&通讯&上线 判断&#xff1a;445 通讯 上…

Azure Windows2012升级2016

Azure Windows2012升级2016 在自己电脑配置Azure PowerShell前置条件PowerShell 登录到 Azure Azure 中运行 Windows Server 的 VM 的就地升级前置条件&#xff0c;生成一块OS磁盘将生成的OS磁盘附件到需升级的服务器执行就地升级到 Windows Server 2016 升级后配置故障恢复 在…

一觉醒来 AI科技圈发生的大小事儿 05月09日

&#x1f4f3;AlphaFold 3 重磅问世&#xff0c;全面预测蛋白质与所有生命分子相互作用及结构&#xff0c;准确性远超以往水平 Google DeepMind发布了AlphaFold3模型&#xff0c;能够联合预测蛋白质、核酸、小分子等复合物结构&#xff0c;准确性显著提高&#xff0c;对跨生物…

代码随想录算法训练营第36期DAY22

DAY22 654最大二叉树 自己做的时候忽略了&#xff1a;nums.length>1的题给条件。所以每次递归都要判断是否size()>1&#xff0c;不要空的。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *rig…

让数据更「高效」一点!IvorySQL在Neon平台上的迅速部署和灵活应用

IvorySQL本身就是一个100%兼容PostgreSQL最新内核的开源数据库系统&#xff0c;而Neon Autoscaling Platform通常支持多种数据库和应用程序。将IvorySQL集成到该平台后&#xff0c;可以进一步增强与其他系统和应用程序的兼容性&#xff0c;同时更全面的体验IvorySQL的Oracle兼容…

深入探究 Spring Boot Starter:从概念到实践

序言 Spring Boot Starter 是 Spring Boot 生态系统中的一个核心概念&#xff0c;它为开发者提供了一种便捷的方式来捆绑和配置应用程序所需的依赖项。本文将深入探讨 Spring Boot Starter 的概念、原理以及如何创建自定义的 Starter。 一、什么是 Spring Boot Starter Spri…

docker 安装elasticsearch8.X

docker 安装elasticsearch8.X 安装elasticsearch8.X前言安装elasticsearch安装elasticsearch-analysis-ik安装kibana 安装elasticsearch8.X 前言 由于需要安装elasticsearch、IK分词插件、kibana。所以需要保持这三者的版本一致性。 elasticsearch 8.12.2 kibana 8.12.2 ela…

科沃斯梦碎“扫地茅”,钱东奇跌落“风口”

昔日“扫地茅“不香了&#xff0c;科沃斯跌落神坛。 4月27日&#xff0c;科沃斯发布2023年报显示&#xff1a;2023年&#xff0c;科沃斯的营收为155.02亿元&#xff0c;同比增加1.16%&#xff1b;同期&#xff0c;净利为6.10亿元&#xff0c;同比减少63.96%。科沃斯的经营业绩…

Mysql数据在磁盘上的存储结构

一. 前言 一行数据的存储格式大致如下所示: 变长字段的长度列表&#xff0c;null值列表&#xff0c;数据头&#xff0c;column01的值&#xff0c;column02的值&#xff0c;column0n的值… 二. 变长字段 在MySQL里有一些字段的长度是变长的&#xff0c;是不固定的&#xff0c;…

可视化-实验五-Pyecharts工具包的使用及文本数据可视化

1.2.1 pyecharts的数据类型以及新的数据导入逻辑 由于pyecharts背后封装的js库&#xff0c;会涉及到数据类型转化。它暂时要求输入数据必须是python的基础数据类型&#xff0c;比如字符串&#xff0c;列表&#xff0c;字典&#xff0c;而不能是序列这样的数据类型。因此序列输入…

RockChip Android13 添加/删除ListPreference方法

概述: 本章将讲述在Android添加或删除ListPreference的几种方法,并以EthernetSettingsActivity为例,添加/删除一项ListPreference: 默认效果图: 添加后效果图: 方法一: 1、全部添加xml 在Activity类中使用addPreferencesFromResource()方法解析XML文件并添加Prefere…

Node.js安装与配置环境 v20.13.1(LTS)

1 下载 Node.js — Run JavaScript Everywhere LTS -- long-term support&#xff0c;长期维护版本 如果要下载其他版本在download里选择下载 2 安装 一路点击next&#xff0c;默认安装路径C:\Program Files\nodejs 3 环境变量配置 1&#xff09;Path环境变量增加nodejs安装…

艾体宝方案 | 加密USB金融解决方案

在现代金融行业中&#xff0c;保护敏感数据和合规性已成为至关重要的任务。为了帮助金融公司应对移动性风险和合规挑战&#xff0c;我们提供了一种高效的加密USB解决方案。 一、为什么金融公司需要加密USB解决方案 1、降低移动性风险 金融服务公司正在迅速过渡到一种模式&a…

将本地托管模型与 Elastic AI Assistant 结合使用的好处

作者&#xff1a;来自 Elastic James Spiteri, Dhrumil Patel 当今公共部门组织利用生成式人工智能解决安全挑战的一种方式。 凭借其筛选大量数据以发现异常模式的能力&#xff0c;生成式人工智能现在在帮助团队保护其组织免受网络威胁方面发挥着关键作用。 它还可以帮助安全专…

短信平台群发服务有什么优点

短信平台群发服务有什么优点 提高营销效率 短信平台群发服务利用自动化技术&#xff0c;可以帮助企业迅速向大量潜在客户营销信息。相比传统的逐一方式&#xff0c;群发服务可以同时大批目标客户&#xff0c;大大提高了营销效率。企业可以轻松地在短时间内覆盖更多的潜在客户&…

JavaSE——异常(2/2)-异常的处理(记录异常并提示 、尝试重新修复)

目录 记录异常并提示 案例演示 流程解析 写法优化 尝试重新修复 开发中对于异常的常见处理方式 一层一层往上抛出异常&#xff0c;并且在最上层捕获异常&#xff0c;分为两种不同的处理方式。 例如&#xff0c;B站网页报错就是采取的第一种方式&#xff1a; 记录异常并…

linux 性能监控命令之dstat

1. dstat 系统默认为安装&#xff0c;直接安装阿里源后&#xff0c;yum install -y dstat安装即可&#xff0c;该命令整合了 vmstat &#xff0c; iostat 和 ifstat&#xff0c;我们先看下效果&#xff1a; 我们先看看具体参数&#xff1a; [rootk8s-master ~]# dstat --help …

C++STL初阶(1):string的使用及初阶原理

此文作为学习stl的笔记&#xff0c;许多普及、概念性的知识点将不再罗列&#xff08;如stl的发展、背景等&#xff09; 便于读者作为复习等方法了解。 0.STL简介&#xff08;笔记向&#xff09; STL不是祖师爷本贾尼实现的&#xff0c;是在惠普实验室中实现的。其作为一个数据结…
最新文章