mysql sum函数返回类型_MySQL的sum函数返回的门类
MySQL的sum函数返回的类型 今天项目切换数据库时,出错 访问数据库的代码大概是这样: String sql = "select sum(number) as sumNumberOfOneDay from tableName";ListMap rows = getJdbcTemplate().queryForList(sql);for (Map row : rows) {SomeBean item =
MySQL的sum函数返回的类型
今天项目切换数据库时,出错
访问数据库的代码大概是这样:
String sql = "select sum(number) as sumNumberOfOneDay from tableName";
Listrows = getJdbcTemplate().queryForList(sql);
for (Map row : rows) {
SomeBean item = new SomeBean();
item.setSumNumberOfOneDay(objectToInt(row.get("sumNumberOfOneDay")));
}
private int objectToInt(Object obj) {
return Integer.parseInt("" + obj);
}
表字段“number”的类型是int(10) unsigned
连接数据库DataBaseA,测试运行正常;切换到另一数据库DataBaseB(数据库表,表名,表结构一样)时,发现报错:
java.lang.NumberFormatException: For input string: "10.0"
把sql语句拷贝到MySQL命令行窗口里面直接执行,sum(number)返回的值是10;
但在Spring的getJdbcTemplate().queryForList(sql)返回,则变成了10.0,
打印row.get("sumNumberOfOneDay").getClass()的结果是:class java.lang.Double
切回DataBaseA,打印结果是java.math.BigDecimal
两个数据库的查询结果在MySQL命令行窗口返回整数,但在Java程序中返回浮点数
那不用Spring,直接操作JDBC:
Connection conn = getJdbcTemplate().getDataSource().getConnection();
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
String name = rsmd.getColumnName(i);
String type = rsmd.getColumnTypeName(i);
System.out.println(name + ", " + type);
}
DataBaseA打印的结果:
sumNumberOfOneDay, DECIMAL
DataBaseB打印的结果:
sumNumberOfOneDay, DOUBLE
基本可判断是MySQL的问题
网上搜索一下,果然:
The SUM() and AVG() functions return a DECIMAL value for exact-value arguments (integer or DECIMAL), and a DOUBLE value for approximate-value arguments (FLOAT or DOUBLE). (Before MySQL 5.0.3, SUM() and AVG() return DOUBLE for all numeric arguments.)
http://stackoverflow.com/questions/10592481/what-is-the-return-type-of-sum-in-mysql
原来MySQL 5.0.3之前的版本,sum函数返回的是DOUBLE类型
回头检查一下MySQL的版本:
DataBaseA:
5.1.44 Source distribution
DataBaseB:
4.1.7-standard-log
果然是这样
解决办法:
1.笨方法,就是重写objectToInt方法:
if (obj instanceof Double) {
return ((Double)obj).intValue();
}
if (obj instanceof BigDecimal) {
return ((BigDecimal)obj).intValue();
}
return Integer.parseInt(obj.toString());
2.利用Spring的BeanPropertyRowMapper:
Listlist = getJdbcTemplate().query(sql, new BeanPropertyRowMapper(SomeBean.class));
应该尽量采用方法2,避免自己处理
查看一下Spring的getJdbcTemplate().query(sql, new BeanPropertyRowMapper(SomeBean.class))方法,
发现它的大体思路是这样:
1.通过SomeBean.class得到所有property
2.根据property的类型,调用ResultSet.getXXX()得到对应的值
在ResultSet.getXXX()方法里面,就实现了类型转换
例如com.mysql.jdbc.Result的getInt方法(关键部分的代码):
val = getString(columnIndex);
if ((val != null) && (val.length() != 0)) {
if ((val.indexOf("e") == -1) && (val.indexOf("E") == -1)
&& (val.indexOf(".") == -1)) {
return Integer.parseInt(val);
} else {
// Convert floating point
return (int) (Double.parseDouble(val));
}
} else {
return 0;
}
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:php中文网
mysql sum函数返回类型_MySQL的sum函数返回的门类相关推荐
- mysql sum返回类型_MySQL的sum函数返回的类型
今天项目切换数据库时,出错 访问数据库的代码大概是这样: String sql = "select sum(number) as sumNumberOfOneDay from tableNa ...
- oracle sum函数返回类型,Oracle / PLSQL SUM函数
这个Oracle教程解释了如何使用Oracle / PLSQL SUM函数. SUM(x) 添加x中的所有值,并返回总和. SUM函数对一组行进行操作,并返回一行输出. Null值被SUM函数忽略.您 ...
- mysql自定义函数的分号_MySQL之自定义函数实例讲解
转自:https://www.2cto.com/database/201804/740205.html MySQL中已经有很多函数,如时间函数等,但是有时这些函数不能满足自己的设计需求,此时需要自定义 ...
- mysql自定义函数的分号_MySQL基础(三)—函数、自定义函数
上一篇 MySQL基础(二)-操作表记录 这一篇是对函数的笔记,其中操作的数据库在上一篇文章中有代码,可以去看一下. 1.函数 1.1:函数的分类 字符函数 数值运算符与函数 比较运算符与函数 日期时 ...
- mysql自定义函数的分号_MySQL基础(三)―函数、自定义函数
MySQL基础(二)―操作表记录 这一篇是对han的笔记,其中操作的数据库在上一篇文章中有代码,可以去看一下. 字符函数 数值运算符与函数 比较运算符与函数 日期时间函数 信息函数 聚合函数 加密函数 ...
- mysql concat键值对_mysql中concat函数实现数据库字段合并查询
concat()函数是mysql中用来字符类型的字段联合查询的一个不错的函数,但尽量不要使用哦, mysql中怎么合并两个字段为一个字段呢?试了好多方法,结果还是不是我想要的 例如:select (a ...
- mysql几种索引类型_Mysql几种索引类型的区别及适用情况
如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE. 那么,这几种索引有什么功能和性能上的不同呢? FULLTEXT 即为全文索引,目前只有MyI ...
- 数组在mysql中是什么类型_MySQL 中的数据类型介绍
1.概述 要了解一个数据库,我们也必须了解其支持的数据类型. MySQL支持所有标准的SQL数据类型,主要分3类: 数值类型 字符串类型 时间日期类型 另一类是几何数据类型,用的不多,也没多介绍. ...
- mysql相隔多长时间_Mysql 计算时间间隔函数
mysql计算时间差函数 MySql计算两个日期的时间差函数TIMESTAMPDIFF用法,只要用一句SQL语句就可以办到了. MySql计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法 ...
最新文章
- C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别
- linux centos lamp,Centos下搭建LAMP
- QT的QDBusVariant类的使用
- C# async 和 await 理解
- 正确使用PresentModalViewController
- LeetCode 1855. 下标对中的最大距离(双指针)
- iphone开发之C++和Objective-C混编
- pandas 基本使用
- [leetcode]1.两数之和
- android paint 线宽_Paint setStrokeWidth方法:设置空心线宽
- mysql q4m_Mysql Q4M 队列操作封装(二)
- 高薪诚聘项目经理,架构师,高级工程师,工程师,网页设计师
- zencart 商城 Twitter推广技巧
- android html模板下载地址,Android HTML模板
- 淘宝虚拟物品类目管理规范
- ssh连接远程服务器
- 2019年中国公有云厂商发展状况白皮书
- c语言程序设置存根,gmock可以用于存根C函数吗?
- ps更换证件照底色(视频版)
- 161、锐捷交换机如何配置ssh管理
热门文章
- Andrew Ng深度学习课程笔记
- 浅述 Docker 的容器编排
- 数据中台 VS 传统大数据平台,这 8 点区别要了解
- 对不起,我把APP也给爬了
- oracle 12c 低版本,oracle高版本迁移数据到低版本(12c至11g)方法
- python创建只包含一个元素的元组时_Python中声明只包含一个元素的元组数据方法...
- ironpython3桌面开发_IronPython项目有了新负责人
- RuoYi-Cloud 进阶篇_01( Seata 单机环境搭建)
- (进阶篇)Redis6.2.0 集群 哨兵模式_哨兵工作原理_02
- Guns 查询列表_入门试炼03