当前位置: 首页 > news >正文

SQL-为什么缺少 COUNT(*) 会导致总行数返回1

背景:

数据放在数据库中,然后可以接受用户指定查询n条,就展示n条,但是如果用户输入的n大于数据库中实际的总数据,那就展示实际总数据。

此时数据库有三条数据:

 但是运行时,用户指定输入查询为3,却只能查到一条数据:

然后进行debug,发现总数据totalRows总是为1(实际应该为3):


错误分析:

查询语句写错了:

错误写法:String sql = "SELECT * FROM success";

正确写法:String sql = "SELECT COUNT(*) FROM success";

正确代码:

    // 获取总历史记录数量private static int getTotalRowCount(Connection conn) throws SQLException{String sql = "SELECT COUNT(*) FROM success";try(PreparedStatement pstmt = conn.prepareStatement(sql);ResultSet rs = pstmt.executeQuery()) {return rs.next() ? rs.getInt(1) : 0;}}

 

原因分析:

  • 当执行 SELECT * 时,查询所有字段的所有记录

  • rs.getInt(1) 获取的是第一条记录的第一个字段的值(通常是id字段)

  • 如果表中有数据,rs.next() 为true,返回的是第一条记录的id值

  • 而我们表中第一条记录的id是1,所以无论表中有多少条记录,都只返回第一条记录的id值

正确与错误对比:

正确写法你的错误写法
SQLSELECT COUNT(*) FROM successSELECT * FROM success
返回结果单行单列,值为总记录数多行多列,所有记录数据
rs.getInt(1)获取总记录数获取第一条记录的第一个字段值
结果表现返回真实记录总数返回第一条记录的id

细节: 

  1. 聚合函数与非聚合查询的区别

    • COUNT(*) 是聚合函数,返回单行单列的结果

    • SELECT * 是普通查询,返回多行多列的结果集

  2. 列访问方式

    • 使用列名(如 rs.getInt("total"))比位置索引(rs.getInt(1))更安全可靠

相关文章:

  • 07 APP 自动化- appium+pytest+allure框架封装
  • OA工程自动化办公系统 – 免费Java源码
  • Selenium自动化测试工具安装和使用(PyCharm)
  • Java高级 | 【实验四】Springboot 获取前端数据与返回Json数据
  • 设计模式之单例模式(二): 心得体会
  • 详解ZYNQ中的 RC 和 EP
  • TPU(张量处理单元)和 TVM(张量虚拟机)深度分析
  • 知识拓展卡————————关于Access、Trunk、Hybrid端口
  • Ros(俩不同包的节点 交流 topic message)
  • 敏捷项目管理:重塑价值交付的动态协作范式
  • 玄机-第六章 流量特征分析-蚂蚁爱上树
  • 将word文件转为kindle可识别的azw3文件的方法
  • 让音乐“看得见”:使用 HTML + JavaScript 实现酷炫的音频可视化播放器
  • VS代码生成工具ReSharper v2025.1——支持.NET 10和C# 14预览功能
  • 如何配置一个sql server使得其它用户可以通过excel odbc获取数据
  • HTTP(超文本传输协议)详解
  • [特殊字符] 在 React Native 项目中封装 App Icon 一键设置命令(支持参数与默认路径)
  • 鸿蒙开发:hvigorw,编译构建,实现命令打包
  • 《高等数学》(同济大学·第7版)第一章第六节极限存在准则 两个重要极限
  • PyTorch学习笔记 - 损失函数
  • 弄个盈利网站做什么/杭州网络推广网络优化
  • 网站建设中单页面/域名注册管理机构
  • 物业公司网站建设/满十八岁可以申请abc认证吗
  • 养生网站建设免费/百度客服怎么联系
  • 网站如何做会员登录页面/seo网上培训多少钱
  • 建站公司推荐首推万维科技/千锋教育的官网