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微信公开…

git对远程和本地分支进行重命名

要同时对Git的远程和本地分支进行重命名&#xff0c;你需要分几个步骤操作&#xff1a; 重命名本地分支 切换到其他分支&#xff1a;在重命名当前分支之前&#xff0c;确保你不在你想要重命名的那个分支上。你可以通过以下命令切换到另一个分支&#xff08;比如切换到master分…

5.06号模拟前端面试8问

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

红日靶场ATTCK攻击合集

工作繁忙&#xff0c;笔记更新的有比较慢&#xff0c;转到CSDN同步更新很麻烦&#xff0c;直接看原始的笔记吧。不足之处欢迎多多指点。 已经打完的靶场如下&#xff1a; 红日靶场ATT&CK1&#xff1a;https://blog.csdn.net/weixin_44288604/article/details/108172737红…

Java面试题:描述Exchanger类的用途以及如何用它来交换数据

在编程中&#xff0c;Exchanger 类通常是Java并发编程中用于线程间数据交换的一个类。它属于java.util.concurrent包&#xff0c;提供了一种在两个线程之间进行数据交换的机制。使用Exchanger&#xff0c;两个线程可以交换数据&#xff0c;每个线程都可以提供数据并接收对方的数…

【漏洞复现】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…

C++中如何自己封装一个Callable

需求背景 有时候静态编译太不灵活&#xff0c;我们需要更灵活的运行时操作。 又或真假设你在开发一个脚本&#xff0c;想注册本地的C函数到脚本语言的标准库中。例如gdscript的Callable。 下面是一个我的一个简单的实现。我们假设脚本语言中的变量类型是std::any。根据情况不…

《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;甚至非常不好。 我现…

区块链的应用场景以及解释为什么能够保证安全提高信任度

区块链的不可篡改性和透明性是其最重要的特征之一。 不可篡改性&#xff1a;是指一旦数据被写入区块链&#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…

常见的IP代理网站收集

收集的网站代理IP仅用于学习和测试&#xff0c;严禁用于非法用途&#xff0c;因非法使用导致的法律责任由用户承担。 免费代理网站&#xff1a;快代理&#xff0c; 芝麻&#xff0c;太阳 &#xff0c;豌豆 &#xff0c;云代理&#xff0c;开心代理 &#xff0c; 66ip&#xff0…

Nginx配置多个前端项目

1、修改nginx.conf配置文件&#xff1b; 2、必须包含默认的跟路径 location / { root D:/work/nginx-1.22.0/html; index index.html; } 3、添加要访问的前端项目信息&#xff0c;必须使用alias而不能使用root location /…

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

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

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

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