遇到总条数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;不断…

单元测试的最佳实践

整体架构 合适的架构可以提升可测试性。比如菱形对称架构的模块化和解耦特性使得系统各个部分可以独立进行单元测试。这不仅提高了测试的效率&#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标签库主要包含: ****核心标签 格式化标签 …

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整的一身汗&#…

vue3前端开发-小兔鲜项目-登录组件的开发表单验证

vue3前端开发-小兔鲜项目-登录组件的开发表单验证&#xff01;现在开始写登录页面的内容。首先这一次完成基础的首页按钮点击跳转&#xff0c;以及初始化一些简单的表单的输入验证。后期还会继续完善内容。 1&#xff1a;首先还是准备好login页面的组件代码内容。 <script …

企业风险管理的智能监控:Kompas.ai如何预警潜在风险

在企业运营中&#xff0c;风险管理是确保业务连续性和稳健发展的关键环节。随着技术的进步&#xff0c;智能风险管理成为预防损失和识别潜在风险的重要手段。Kompas.ai&#xff0c;作为一款先进的智能监控工具&#xff0c;正通过数据分析和模式识别技术&#xff0c;帮助企业实现…

《华为数据之道》读书笔记六---面向自助消费的数据服务建设

七、从结果管理到过程管理&#xff0c; 从能“看”到能“管” 1、数据赋能业务运营 数字化运营旨在利用数字化技术获取、管理和分析数据&#xff0c;从而为企业的战略决策与业务运营提供可量化的、科学的支撑。 数字化运营归根结底是运营&#xff0c;旨在推动运营效率与能力的…

基站光伏直流叠光能效管理方案

安科瑞 华楠 基站现状和趋势 5G基站是专门提供5G网络服务的公用移动通信基站。5G基站主要用于提供5G空口协议功能&#xff0c;支持与用户设备、核心网之间的通信。按照逻辑功能划分&#xff0c;5G基站可分为5G基带单元与5G射频单元&#xff0c;二者之间可通过CPRI或eCPRI接口…

AFSim仿真系统-架构概览

引言 本文档从最终用户的角度描述了AFSIM架构&#xff0c;旨在帮助最终用户深入了解AFSIM的操作概念。 核心架构 AFSIM基于面向对象的C架构&#xff0c;提供了一种可扩展和模块化的架构&#xff0c;使得许多附加功能能够轻松集成。AFSIM允许新的组件模型&#xff08;如传感器、…

vue3.0学习笔记(二)——生命周期与响应式数据(ref,reactive,toRef,toRefs函数)

1. 组合API-setup函数 使用细节&#xff1a; setup 是一个新的组件选项&#xff0c;作为组件中使用组合API的起点。从组件生命周期来看&#xff0c;它的执行在组件实例创建之前vue2.x的beforeCreate执行。这就意味着在setup函数中 this 还不是组件实例&#xff0c;this 此时是…

SpringBoot 实现图形验证码

一、最终结果展示 二、前端代码 2.1 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title>验证码</title><style>#inputCaptcha {height: 30px;vertical-align: middle;}#verifica…