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.hqwc.cn/news/685758.html

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

相关文章

小红书搞钱美学课-6.0升级版,账号搭建/爆款创作/工具实战/账号变现篇

让我们用视觉撬动流量 课程体系 334253课程权益(5周服务期) 3节账号运营基础课3节自媒体笔记创作课。4节封面设计实操课2次实操加餐分享5次作业指导(一对一)3次答疑直播 课程大纲 一、账号搭建篇 变现模板、精准定位 二、爆款创作篇爆款选题、首图、文案与脚本、快速涨粉…

ros 学习记录(二)URDF小车运动控制

URDF小车运动控制 准备工作创建 robot_xacro.launch 接上文&#xff0c;想用键盘控制小车在Gazebo中移动。 准备工作 名称版本ROSNoeticGazebo11.11.0 创建 robot_xacro.launch 通过运行这个launch文件&#xff0c;可以启动Gazebo仿真环境&#xff0c;并在仿真环境中加载和…

drawio 网页版二次开发(1):源码下载和环境搭建

目录 一 说明 二 源码地址以及下载 三 开发环境搭建 1. 前端工程地址 2. 配置开发环境 &#xff08;1&#xff09;安装 node.js &#xff08;2&#xff09;安装 serve 服务器 3. 运行 四 最后 一 说明 应公司项目要求&#xff0c;需要对drawio进行二次开发&…

Linux -- 日志

一 日志的重要性 在之前的编程经历中&#xff0c;如果我们的程序运行出现了问题&#xff0c;都是通过 标准输出 或 标准错误 将 错误信息 直接输出到屏幕上&#xff0c;以此来排除程序中的错误。 这在我们以往所写的程序中使用没啥问题&#xff0c;但如果出错的是一个不断在运行…

大模型常用微调数据集

文章目录 指令微调数据集人类对齐数据集 为了增强模型的任务解决能力&#xff0c;大语言模型在预训练之后需要进行适应性微调&#xff0c;通常涉及两个主要步骤&#xff0c;即指令微调&#xff08;有监督微调&#xff09;和对齐微调。 指令微调数据集 在预训练之后&#xff0c…

博特激光:355nm高精度紫外激光打标机带来极致工艺

紫外激光打标机在现代制造业和技术中的应用&#xff0c;的确在准确度和精密度方面带来了革命性的提高。特别是在微电子、半导体、医疗器械、高端消费品等需要高精度、高清晰打标的行业&#xff0c;紫外激光打标机以其独特的优势&#xff0c;赋予产品极致的工艺品质。 以下是UV激…

瑞友天翼应用虚拟化系统appsave SQL注入漏洞

网络测绘 fofa:title"瑞友应用虚拟化系统" 漏洞描述 瑞友天翼应用虚拟化系统是西安瑞友信息技术资讯有限公司研发的具有自主知识产权&#xff0c;基于服务器计算架构的应用虚拟化平台。 瑞友天翼应用虚拟化系统中的/Home/Controller/AdminController 存在 appsav…

PyQt6--Python桌面开发(6.QLineEdit单行文本框)

QLineEdit单行文本框 import sys import time from PyQt6.QtGui import QValidator,QIntValidator from PyQt6.QtWidgets import QApplication,QLabel,QLineEdit from PyQt6 import uicif __name__ __main__:appQApplication(sys.argv)uiuic.loadUi("./QLine单行文本框.u…

Kubernetes核心概念基本操作

1.1 Namespace命名空间 1.1.1 Namespace核心概念 Kubernetes 的 Namespace&#xff08;命名空间&#xff09;是一种用于创建逻辑隔离分区的机制&#xff0c;它的主要作用是用来实现多套环境的资源隔&#xff0c;它允许用户在同一个物理集群中模拟出多个虚拟集群的效果。以下是…

性能监测--jemeter

过年时相亲&#xff0c;遇到了一个很好的女生&#xff0c;生活的中心重心有所改变&#xff0c;好久没上线了。今天有时间&#xff0c; 公司让做性能&#xff0c;用到jemeter&#xff0c;所以简单记录一下 部署环境&#xff1a; 安装java 设置环境变量&#xff1a; 找到jdk…

Microsoft Project使用简明教程

一.认识Microsoft Project Microsoft Project 是微软公司开发的项目管理软件&#xff0c;用于规划、协调和跟踪项目的进度、资源和预算&#xff0c;如下图所示&#xff0c;左边是任务的显示&#xff0c;右边是一个日程的显示图&#xff0c;最上方的长方形处在我们项目设定日程…

一文带你了解OSPF 七种LSA类型,很全!

大家好&#xff0c;今天我们 带大家了解一下OSPF的七种LSA类型。 在OSPF&#xff08;开放式最短路径优先&#xff09;协议中&#xff0c;LSA&#xff08;链路状态通告&#xff09;是一种至关重要的数据格式&#xff0c;专门用于描述路由信息。它包含了路由器或网络的各种状态信…