在程序中使用Spring的JdbcTemplate来进行sql操作,其中需要对返回的数据进行排序,由于排序字段可能根据需要的不同而有所变化,于是使用了占位符“?”。执行后没有报错,但是查询出来的数据和直接写sql语句在数据库中查询出来的顺序不一致。

程序代码如下:

JdbcTemplate jdbcTemplate = this.getJdbcTemplate();String sql = "select USER_NAME,PIC_URL,COUNTY_NAME,STAR,DEVOTE,SKILL,THE_LORE,POPULAR,ERROR_NUM from "+ "TF_SERVSTAR_RACE_USER as a,"+ "TF_SERVSTAR_SCORE_DETAIL as b "+ "where a.USER_TYPE = ? and a.BOSS_ID = b.BOSS_ID "+ "order by STAR DESC fetch first " + num + " rows only";List list = jdbcTemplate.queryForList(sql,new Object[] { userType + "" });

结果发现查询出来的结果并没有按照我指定的字段来排序,也没看出是哪儿写错了,真是郁闷。后来把sql直接拿到数据库中执行,出来的结果又是正确的,我仅仅是将占位符换成了实际的值,说明是JdbcTemplate在将参数设置到sql语句时发生了错误。经过排查,果然是这样的。因为我传的参数是字符串类型,所以JdbcTemplate在将参数设置到sql中时转换为对应的数据类型时会加上一个引号。但是加不加引号数据库都不会报错。

在数据中的测试:

不加引号:

Sql:

select USER_NAME,PIC_URL,COUNTY_NAME,STAR,DEVOTE,SKILL,THE_LORE,POPULAR,ERROR_NUM from
TF_SERVSTAR_RACE_USER as a,
TF_SERVSTAR_SCORE_DETAIL as b
where a.USER_TYPE = 2 and a.BOSS_ID = b.BOSS_ID
order by 'STAR' desc fetch first 3 rows only;

加上引号:

Sql:

select USER_NAME,PIC_URL,COUNTY_NAME,STAR,DEVOTE,SKILL,THE_LORE,POPULAR,ERROR_NUM from
TF_SERVSTAR_RACE_USER as a,
TF_SERVSTAR_SCORE_DETAIL as b
where a.USER_TYPE = '2' and a.BOSS_ID = b.BOSS_ID
order by 'STAR' desc fetch first 3 rows only;

目前没想到什么好方法可以解决这个问题。可以将排序字段设置为类的常量字段,然后sql中使用拼接,或者写个条件来判断输入得出对应的排序字段然后拼接,目前我是使用硬编码。如果诸位也遇到过类似的问题,有什么好的解决办法,烦请告诉一声。对了,我数据库用的是DB2,不过这个应该跟数据的关系不大。

JdbcTemplate 排序查询结果不一致问题相关推荐

  1. mysql联合查询数量不一致_Mybatis关联查询,查询出的记录数量与数据库直接查询不一致,如何解决?...

    SELECT  p.name, u.u_name,u.company,u.proComany,u.mobile,u.email, r.money FROM iw_user u LEFT JOIN ra ...

  2. 003_Spring Data JPA分页和排序查询

    1. 创建一个名为spring-data-jpa-paging-and-sorting的Java项目, 同时添加相关jar包, 并添加JUnit能力. 2. 查看PagingAndSortingRep ...

  3. SQL语法之排序查询(进阶3)and常见函数(进阶4)

    SQL语法体系学习笔记 SQL语法之基础查询(进阶1)and条件查询(进阶2) SQL语法之排序查询(进阶3)and常见函数(进阶4) SQL语法之分组函数,分组查询(进阶5)and连接查询(sql9 ...

  4. SQL语言之DQL语言学习(三)排序查询

    语法: select 查询列表 from表where筛选条件order by 排序列表[asc / desc] 其中降序为 DESC 升序为 ASC 如果两者都不写的话系统默认是升序 案例一 查询员工 ...

  5. 检索数据_18_按照多个字段排序查询结果

    按照多个字段排序查询结果 需求描述 需求:从雇员表emp里查询所有的部门编号,员工名称,职位,工资信息,这里要求先以部门编号排序再以工资从高到低排序显示. 解决方法:这里用到SQL的关键字 ORDER ...

  6. mysql排序由低到高_MySQL入门系列(四)—— 排序查询

    一.排序查询 语法 SELECT 查询列表 FROM 表 [WHERE 筛选条件] ORDER BY 排序列表 [ASC] 一般ORDER BY语句放在查询语句的最后[LIMIT子句除外] 案例 案例 ...

  7. mysql递归查询之后的排序问题_MySQL递归排序查询+树节点生成

    mysql 递归排序查询 备注:producttype 排序表,producttype.ptype父节点 ,producttype .id 主键,showTreeNodes (IN rooti mys ...

  8. mysql查询后从高到低排序_[MySQL基础]三、排序查询

    排序查询 语法: SELECT 查询列表 FROM 表 [WHERE 筛选条件] ORDER BY 排序列表 [ASC|DESC]; #[ ]中的内容表示可选 特点:asc代表的是升序,desc代表的 ...

  9. 一、MySQL查询学习笔记(基础查询、条件查询、排序查询、常见函数、分组查询 详解)

    DQL语言的学习 一.基础查询 语法: **SELECT 要查询的东西 [FROM 表名];**类似于Java中 :System.out.println(要打印的东西); 特点: ①通过select查 ...

最新文章

  1. Java设计模式详解
  2. c++类的静态成员特性
  3. 【CodeForces - 215B 】Olympic Medal (数学,公式推导)
  4. 绘制矩形php,php绘制一个矩形的方法
  5. 程序员的自我修养(转载)
  6. 关于ArcGIS动态图层空间内栅格数据,JS前端显示颜色不正确的解决方案
  7. matlab批量储存变量_Matlab批量赋值
  8. 路侧智慧泊车解决方案
  9. Zabbix全网监控
  10. 软考中级软件设计师-计算机系统知识点速查
  11. [转帖]DRAM芯片战争,跨越40年的生死搏杀
  12. 小米MIUI12.5手机降级教程,线刷
  13. MySQL轻快入门2021.3.19(常用函数)
  14. 7月编程排行榜新鲜出炉,再次上演神仙打架!
  15. WHERE条件子句 | 零基础自学SQL课程系列Day5
  16. 广交投集团领导莅临星舆科技参观交流
  17. 聚焦边缘创新,Rancher推出全新开源力作Octopus
  18. android7 强制gpu渲染,安卓手机开启强制GPU渲染功能的方法
  19. DirectSound简单的概述|DirectSound SDK文档翻译
  20. STM32应用知识归纳

热门文章

  1. 运维管理成中小企业“心头大患” 飞塔“安接入”一步解决
  2. pecamaker+corosync高可用集群的搭建
  3. SQL STUFF用法很有趣的语法
  4. Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
  5. Go实战--二维码生成server
  6. emqtt 试用(七)追踪
  7. 利用http-server测试vue-cli打包后的项目
  8. ASP.NET取用户浏览器IP地址等信息
  9. Traffic Server中的cache.config的字段理解
  10. Hadoop系列之九:Hadoop集群伪分布式模式的实现详解