遇到总条数count(*)返回不了数据

文章目录

  • 前提
  • 1.准备数据
    • 1.1 建表语句
    • 1.2 插入数据
  • 2.程序代码
  • 3.返回结果与分析
  • 4.验证


前提

获取h_user表中count(*)字段的值打印出来,打印出来是0,数据库中执行sql返回不是0。端点调试找到原因。下面先把数据库表数据及程序贴出来。

1.准备数据

1.1 建表语句

CREATE TABLE public.h_user (id serial4 not null,username varchar(50) NULL,"password" varchar(64) NULL,nickname varchar(60) NULL,email varchar(255) NULL,gender bit(1) NULL,height float4 NULL,CONSTRAINT user_pkey PRIMARY KEY (id)
);

1.2 插入数据

INSERT INTO public.h_user (username,"password",nickname,email,gender,height) VALUES ('ztttest','ztttest1234','ztt','5938@qq','0',173.0);

2.程序代码

程序入口:countTst的main方法

package org.example.countTest;
import java.util.List;
public class countTst {public static void main(String[] args) throws Exception {int sumCount =0;String countSql = "select count(*) totalcnt from h_user ";JdbcUtils jdbcUtils = new JdbcUtils("jdbc:postgresql://localhost:5432/postgres?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf-8&useSSL=false","postgres","postgres");List<TotalRecord>  totalNumList = jdbcUtils.executeQuery(countSql, TotalRecord.class,null);if(totalNumList.size()>0){// 获取表总行数sumCount = totalNumList.get(0).getTotalcnt();System.out.println("总数sumCount为:"+sumCount);}}
}

实体类:TotalRecord

package org.example.countTest;
public class TotalRecord {private int totalcnt;public int getTotalcnt() {return totalcnt;}public void setTotalcnt(int totalcnt) {this.totalcnt = totalcnt;}
}

工具类 JdbcUtils

package org.example.countTest;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class JdbcUtils {private  String url;public JdbcUtils(String url, String username, String password) {this.url = url;this.username = username;this.password = password;}private  String username;private  String password;public static Connection conn = null;public static PreparedStatement ps = null;/*** 数据库列与实体对象映射处理* @param sql* @param clazz* @param parameters* @param <T>* @return* @throws Exception*/public  <T> List<T> executeQuery(String sql, Class clazz, Object...parameters) throws Exception {// 获取连接conn = getConnection();// 执行SQL获取结果集ResultSet rs = executeQuery(sql, parameters);// 获取表的元数据ResultSetMetaData metaData = ps.getMetaData();List<T> resultList = new ArrayList<>();// 结果集映射成对象实体while(rs.next()) {// 获取表字段总数int columnCount = metaData.getColumnCount();// 通过反射实例化对象Object obj = clazz.newInstance();// 遍历表字段for (int i = 1; i <= columnCount; i++) {// 列名String columnName = metaData.getColumnName(i);// 列值Object columnValue = rs.getObject(i);// 数据库字段与数据库值的映射setFieldValueForColumn(obj, columnName, columnValue);}resultList.add((T) obj);}// 关闭资源JdbcUtils.close(JdbcUtils.conn, JdbcUtils.ps, rs);return resultList;}/*** 根据字段名称设置对象属性* @param o* @param columnName* @param columnValue*/private static void setFieldValueForColumn(Object o, String columnName, Object columnValue) {Class<?> aClass = o.getClass();try {Field field = aClass.getDeclaredField(columnName);field.setAccessible(true);field.set(o, columnValue);field.setAccessible(false);} catch (Exception e) {// 驼峰模式的处理if (columnName.contains("_")) {// \w -> 元字符,相当于 [a-zA-Z0-9]Pattern pattern = Pattern.compile("_(\\w)");columnName = columnName.toLowerCase();Matcher matcher = pattern.matcher(columnName);StringBuffer sb = new StringBuffer();if (matcher.find()) {// matcher.group(1) 指的是第一个括号里的东西 \w// 替换掉_,并将_的相邻下一个字母转为大写matcher.appendReplacement(sb, matcher.group(1).toUpperCase());}matcher.appendTail(sb);// 再次调用复制操作setFieldValueForColumn(o,sb.toString(),columnValue);}}}/*** 执行查询* @param sql* @param parameters* @return*/public  ResultSet executeQuery(String sql, Object...parameters) throws SQLException {ResultSet rs = null;// 获取数据库库连接conn = getConnection();// 创建Statement对象ps = conn.prepareStatement(sql);// 设置sql中的参数if (Objects.nonNull(parameters) && parameters.length > 0) {for (int i = 0; i < parameters.length; i++) {ps.setObject(i+1, parameters[i]);}}// 返回结果集return ps.executeQuery();}/*** 数据库连接* @return* @throws SQLException*/public  Connection getConnection() throws SQLException {if (conn == null) {try {conn = DriverManager.getConnection(url, username, password);} catch (SQLException e) {e.printStackTrace();}}return conn;}public static  void close(Connection conn, Statement sta, ResultSet rs){try{// 关闭ResultSetif(Objects.nonNull(rs)){rs.close();}// 关闭Statementif (Objects.nonNull(sta)) {sta.close();}// 关闭Connectionif (Objects.nonNull(conn)) {sta.close();}}catch (Exception e){e.printStackTrace();}}
}

3.返回结果与分析

程序跑的结果如下:
在这里插入图片描述
数据库中执行sql的结果:
在这里插入图片描述
ResultSet rs中执行完获取时还可以获取到数据。接着进setFieldValueForColumn(obj, columnName, columnValue)方法中看。
在这里插入图片描述
执行 field.set(o, columnValue);时抛异常“不能设置int字段org.example.countTest.TotalRecord.totalcnt为java.lang.Long。”
在这里插入图片描述
原因找到了,count(*)返回的是Long类型的数据,我们的实体类TotalRecord 中属性 totalcnt的数据类型是int,所以接收数据时抛异常了,把相对应的totalcnt改为long类型,并把countTst中的main方法中sumCount局部变量改为long就可以接收到数据了。

4.验证

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50236.shtml

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

相关文章

CSS技巧专栏:一日一例 12 -纯CSS实现边框上下交错的按钮特效

CSS技巧专栏&#xff1a;一日一例 12 -纯CSS实现边框上下交错的按钮特效 大家好&#xff0c;今天我们来做一个上下边框交错闪动的按钮特效。 本例图片 案例分析 虽说这按钮给人的感觉就是上下两个边框交错变换了位置&#xff0c;但我们都知道border是没法移动的。那么这个按…

【无标KaiwuDB CTO 魏可伟:差异化创新,面向行业的多模架构题】

2024年7月16日&#xff0c;KaiwuDB CTO 魏可伟受邀于 2024 可信数据库发展大会主论坛发表演讲《多模一库 —— KaiwuDB 的现代数据库架构探索》&#xff0c;以下是演讲精华实录。 多模数据库 是顺应时代发展与融合趋势的产物 数据模型最早始于网状模型和层次模型&#xff0c;…

Spark实时(五):InputSource数据源案例演示

文章目录 InputSource数据源案例演示 一、​​​​​​​File Source 1、读取text文件 2、读取csv文件 3、读取json文件 二、Socket Source 三、Rate Source InputSource数据源案例演示 在Spark2.0版本之后&#xff0c;DataFrame和Dataset可以表示静态有边界的数据&am…

移动式气象站:便携科技的天气守望者

在科技日新月异的今天&#xff0c;我们身边的许多设备都在向着更加智能化、便携化的方向发展。而在气象观测领域&#xff0c;移动式气象站的出现&#xff0c;不仅改变了传统气象观测的固有模式&#xff0c;更以其灵活性和实时性&#xff0c;在气象监测、灾害预警等领域发挥着越…

MySQL练习05

题目 步骤 触发器 use mydb16_trigger; #使用数据库create table goods( gid char(8) primary key, name varchar(10), price decimal(8,2), num int);create table orders( oid int primary key auto_increment, gid char(10) not null, name varchar(10), price decima…

基于python的BP神经网络红酒品质分类预测模型

1 导入必要的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder from tensorflow.keras.models import Sequential from tenso…

NET8部署Kestrel服务HTTPS深入解读TLS协议之Certificate证书

Certificate证书 Certificate称为数字证书。数字证书是一种证明身份的电子凭证&#xff0c;它包含一个公钥和一些身份信息&#xff0c;用于验证数字签名和加密通信。数字证书在网络通信、电子签名、认证授权等场景中都有广泛应用。其特征如下&#xff1a; 由权威机构颁发&…

跟李沐学AI:池化层

目录 二维最大池化 填充、步幅和多个通道 平均池化层 池化层总结 二维最大池化 返回滑动窗口中的最大值。 图为池化窗口形状为 22 的最大池化层。着色部分是第一个输出元素&#xff0c;以及用于计算这个输出的输入元素: max(0,1,3,4)4。池化层与卷积层类似&#xff0c;不断…

Spark核心知识要点(八)Shuffle配置调优

1、Shuffle优化配置 -spark.shuffle.file.buffer 默认值&#xff1a;32k参数说明&#xff1a;该参数用于设置shuffle write task的BufferedOutputStream的buffer缓冲大小。将数据写到磁盘文件之前&#xff0c;会先写入buffer缓冲中&#xff0c;待缓冲写满之后&#xff0c;才会…

Linux中,MySQL的用户管理

MySQL库中的表及其作用 user表 User表是MySQL中最重要的一个权限表&#xff0c;记录允许连接到服务器的帐号信息&#xff0c;里面的权限是全局级的。 db表和host表 db表和host表是MySQL数据中非常重要的权限表。db表中存储了用户对某个数据库的操作权限&#xff0c;决定用户…

单元测试的最佳实践

整体架构 合适的架构可以提升可测试性。比如菱形对称架构的模块化和解耦特性使得系统各个部分可以独立进行单元测试。这不仅提高了测试的效率&#xff0c;还能够减少测试的依赖性&#xff0c;提高测试准确性。 代码设计 代码设计和可测试性有密切关联。强烈建议一个方法的代码行…

Android 15 适配整理——实践版

背景 谷歌发布Android 15后&#xff0c;国内的手机厂商迅速行动&#xff0c;开始了新系统的适配工作。小米、OPPO、vivo和联想等金标联盟成员联合发布了适配公告&#xff0c;督促APP开发者在2024年8月31日前完成适配工作&#xff0c;否则将面临搜索标签提示、应用降级、分机型…

JavaWeb笔记_JSTL标签库JavaEE三层架构案例

一.JSTL标签库 1.1 JSTL概述 JSTL(jsp standard tag library):JSP标准标签库,它是针对EL表达式一个扩展,通过JSTL标签库与EL表达式结合可以完成更强大的功能 JSTL它是一种标签语言,JSTL不是JSP内置标签 JSTL标签库主要包含: ****核心标签 格式化标签 …

【算法】插入区间

难度&#xff1a;中等 题目&#xff1a; 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals 按照 starti 升序排列。同样给定一个区间 newInte…

leetcode面试题17.最大子矩阵

sooooooo long没刷题了&#xff0c;汗颜 题目链接&#xff1a;leetcode面试题17 1.题目 给定一个正整数、负整数和 0 组成的 N M 矩阵&#xff0c;编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2]&#xff0c;其中 r1, c1 分别代表子矩阵左上角的行号和…

Android平台轻量级RTSP服务模块二次封装版调用说明

技术背景 在前面的blog&#xff0c;我们发布了Android平台轻量级RTSP服务模块的技术对接说明&#xff0c;好多开发者希望&#xff0c;更黑盒的对接轻量级RTSP服务这块&#xff0c;专注于自身业务逻辑。为此&#xff0c;我们针对Android平台轻量级RTSP服务模块&#xff0c;做了…

解析capl文件生成XML Test Module对应的xml工具

之前一直用的CAPL Test Module来写代码&#xff0c;所有的控制都是在MainTest()函数来实现的&#xff0c;但是有一次&#xff0c;代码都写完了&#xff0c;突然需要用xml的这种方式来实现&#xff0c;很突然&#xff0c;之前也没研究过&#xff0c;整理这个xml整的一身汗&#…

【Nacos】微服务注册在不同的group上,支持跨group服务发现,二次开发

Nacos具备微服务注册和发现&#xff0c;以及配置管理的功能&#xff0c;本文详情描述【注册和发现】的原理&#xff0c;以及基本使用&#xff0c;包括如何进行跨group注册和发现。 一、Nacos配置spring:cloud:nacos:discovery:server-addr: nacosIP地址:8849namespace: devgro…

无人机飞行姿态俯仰、横滚、偏航、油门详解

无人机飞行姿态涉及其在空中的空间位置和方向。飞行姿态控制的精确性和稳定性是无人机实现自主飞行和完成任务的关键。无人机的飞行姿态主要通过控制其横滚、俯仰和偏航来实现。以下是对无人机飞行姿态的详细解释&#xff1a; 1. 横滚&#xff08;Roll&#xff09; 定义&…

vue中的nexttrick

Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它允许开发者通过声明式的数据绑定来构建网页应用。在 Vue 中&#xff0c;nextTick 是一个非常重要的 API&#xff0c;它用于延迟回调的执行&#xff0c;直到下次 DOM 更新循环之后。 为什么使用 nextTick&#xff1f; …