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,复制原始表数据并新增字段dlprownumsqlOne = 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.mzph.cn/bicheng/9010.shtml

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

相关文章

视频号小店不直播怎么出单?这里面的秘密,一篇文章全曝光!

大家好&#xff0c;我是电商糖果 这两年关于视频号搞电商的话题度非常高&#xff0c;也吸引了很多商家入驻。 视频号因为背后巨大的私域流量池扶持&#xff0c;所以它的转化率非常高。 根据官方发出来的战报&#xff0c;我们也可以看出它的数据是翻倍增长。 在2024微信公开…

5.06号模拟前端面试8问

5.06号模拟前端面试8问 1.promise如何实现then处理 在JavaScript中&#xff0c;Promise 是一个代表异步操作最终完成或失败的对象。它有三种状态&#xff1a;pending&#xff08;等待&#xff09;&#xff0c;fulfilled&#xff08;完成&#xff09;&#xff0c;rejected&…

【漏洞复现】GB28181摄像头管理平台api接口处存在未授权漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

faad2交叉编译——aac解码为pcm,解决faad单通道转双通道问题

FAAD是比较成熟高效的开源AAC解码库&#xff0c;这里用于解码AAC生成PCM数据&#xff0c;用于音频播放。这里因为faad库&#xff0c;会将单通道转化为双通道踩了些坑&#xff0c;所以记录一下。 我使用的是2.11.0版本&#xff0c;貌似往前的版本没有使用CMake&#xff0c;需要c…

《Fundamentals of Power Electronics》——一些常用变换器的正则电路参数值

对于理想的CCM PWM dc-dc转换器&#xff0c;其包含一个电感和电容&#xff0c;正则模型有效的低通滤波器需要包含一个电感和一个电容。正则模型简化为如下图所示。 假设电容与负载直接相连。基础的buck、boost和buck-boost转换器的参数值如下表所示。 该模型可以用传统的线性电…

使用网站内容进行多渠道品牌营销的主要优势

在选择服务提供商时&#xff0c;人们使用不同的方式来查找信息并与他们联系。有些人更喜欢网站&#xff0c;有些人则使用社交媒体或电子邮件。网站对于数字存在仍然至关重要&#xff0c;但跨多个渠道管理内容现在至关重要。多渠道营销以客户喜欢的方式与客户建立联系&#xff0…

记住这篇!论文查重降重aigc降低一定要看!

论文查重率降不下去真是受不了啊&#xff01;根本降不下去&#xff01;这些方法工具太适合我这样的论文裁缝了&#xff01; 一、论文降重/aigc降低工具 如果实在降不下去可以使用“蝌蚪论文”和“反向词典”这两个工具&#xff0c;也是我最常用的降重软件。 1.蝌蚪论文&#xf…

我从这些书籍中学来的财务以及税务知识

“你不能指望在开始工作的头两年攒下任何积蓄。” 这句话一直是我的座右铭&#xff0c;也是我给大学生的个人理财建议。这也就难怪我二十出头的时候&#xff0c;基本就是靠薪水过日子。 回想起来&#xff0c;我意识到其实这并不是最好的建议&#xff0c;甚至非常不好。 我现…

BigInteger和BigDecimal类

BigInteger 和 BigDecimal 介绍 应用场景 BigInteger适合保存比较大的整型BigDecimal适合保存精度更高的浮点型&#xff08;小数&#xff09; BigInteger 和 BigDecimal 常见方法 1&#xff0c;add 加2&#xff0c;subtract 减3&#xff0c;multiply 乘4&#xff0c;divide…

mysql其它补充

exist和in的区别 exists 用于对外表记录做筛选。 exists 会遍历外表&#xff0c;将外查询表的每一行&#xff0c;代入内查询进行判断。 当 exists 里的条件语句能够返回记录行时&#xff0c;条件就为真&#xff0c;返回外表当前记录。反之如果 exists 里的条件语句不能返回记…

SpringBoot 使用Outlook邮箱发送邮件

目录 一、开启Outlook设置 二、依赖 三、配置文件 四、代码调用 一、开启Outlook设置 开启设置如图&#xff1a; 二、依赖 <!-- 邮箱依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mai…

网页主题自动适配:网页跟随系统自动切换主题

主题切换是网站设计中一个非常有趣的功能&#xff0c;它允许用户在多种预先设计的样式之间轻松切换&#xff0c;以改变网站的视觉表现。最常见的就是白天和黑夜主题的切换&#xff0c;用户可以根据自己的喜好进行设置。 除了让用户手动去切换主题外&#xff0c;如果能够让用户第…

ChatGLM3大模型本地化部署、应用开发与微调

文章目录 写在前面ChatGLM3推荐图书作者简介推荐理由粉丝福利写在后面 写在前面 本期博主给大家推荐一本初学者学习并部署大模型的入门书籍&#xff0c;一起来看看吧&#xff01; ChatGLM3 ChatGLM3是继一系列先进语言模型之后的又一力作&#xff0c;专为追求高精度和广泛适…

计算机发展史故事【6】

电脑群英谱 本世纪三、四十年代&#xff0c;是计算机发展史里最重大的收获季节。群英荟萃&#xff0c;逐鹿中原&#xff0c;鹿究竟死于谁手&#xff0c;并不是没有争议的。除了马克1 号与埃历阿克&#xff0c;还有一大批科学家为计算机的诞生作出过巨大的贡献&#xff0c;他们…

智慧变电站守护者:TSINGSEE青犀AI视频智能管理系统引领行业革新

一、方案概述 随着科技的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;技术已经深入到各个领域。在变电站安全监控领域&#xff0c;引入AI视频监控智能分析系统&#xff0c;可以实现对站内环境、设备状态的实时监控与智能分析&#xff0c;从而提高变电站的安全运行…

docker-compose集成elk(基于logstash+filebeat)采集java和nginx日志

1.准备compose.yml编排式文件 services: #日志信息同步logstash:container_name: logstashimage: docker.elastic.co/logstash/logstash:7.17.14 #logstash:command: logstash -f /usr/share/logstash/pipeline/logstash.confdepends_on:- elasticsearchrestart: on-failurepo…

解决$‘\r‘: command not found 或syntax error near unexpected token `$‘\r‘的四个方法

问题原因&#xff1a; 两个报错原因都是Linux和windows下的回车换行符不兼容 解决方法&#xff1a; 方法一&#xff1a;在windows系统可以用文本编辑器查看所有字符&#xff0c;例如notepad&#xff0c;编辑->档案格式转换->转换为UNIX格式 方法二&#xff1a;在Linux系…

Vue的省份联动

Vue的省份联动 一、安装依赖库 npm install element-china-area-data -Snpm install element-ui --save全局使用elemntui组件库 import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css;Vue.use(ElementUI);二 、代码如下 <template><div…

一、手写一个uart协议——rs232

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1 波形设计1.3.2 代码实现与tb1.3.4 顶层设计1.3.3 仿真 本篇内容&#xff1a; 一、RS232的回环测试 上位机…

制造业的智慧进化:机器学习与人工智能的全方位渗透

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…