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中文网

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

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

相关文章

mysql 联合索引 性能_mysql:联合索引及优化

命名规则&#xff1a;表名_字段名1、需要加索引的字段&#xff0c;要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系&#xff0c;加索引不起作用4、符合最左原则尽量不要用or&#xff0c;如果可以用union代替&#xff0c;则一定要代替https://segmentf…

以下不属于mysql列类型的是什么意思_下列 ________ 类型不是 MySQL 中常用的的数据类型。_学小易找答案...

【简答题】工作区跳线的制作 请依据EIA568国际标准,制作一根直通线(即两端都是EIA568B线芯排布规律) 做好网线后,请拍照上传作业。【单选题】UNIQUE 惟一索引的作用是 ( ) :【简答题】根据实地观察结果,分别从树性、枝干、叶片、花、果实(如果有)等器官指出以下三组果树在植株形…

ruby mysql dbi_Ruby MySQL DBI实例

本次章节将介绍如何用Ruby来访问数据库。类似的Perl DBI模块为Ruby脚本的Ruby DBI模块提供了一种数据库(这里用MySQL讲解)独立的接口。DBI代表数据库无关的接口为RubyDBI提供的Ruby代码和底层数据库之间的抽象层&#xff0c;允许你真的很容易切换数据库实现。它定义了一套方法&…

api demo 京东商品详情_jd-demo

一个仿京东的网站&#xff1a;后端使用java&#xff0c;基本架构&#xff1a;springMVC spring mybatis&#xff1b;前端技术&#xff1a;HtmlCSSJQueryReactSass...后台接口说明&#xff1a;####1.统计用户、商品、订单数量/manage/statistic/base_count.dorequest无respons…

mysql linux 迁移mac_Mac和Linux之间传输数据,并导出mysql数据到本地

从 本地 复制到 远程复制文件&#xff1a;命令格式&#xff1a;scp local_file remote_usernameremote_ip:remote_folder或者scp local_file remote_usernameremote_ip:remote_file或者scp local_file remote_ip:remote_folder或者scp local_file remote_ip:remote_file第1,2个…

mysql与tomcat_mysql数据库与tomcat服务器的一些细节问题

java程序使用数据库的方法1.使用jndi数据源核心代码&#xff1a;initCtx new InitialContext()DataSource ds;ds (DataSource) initCtx.lookup("java:comp/env/jdbc/mysql1");conn ds.getConnection();----------配置服务器信息web项目web.xml中配置MySQL DB Conn…

python出现严重错误_安装出现严重错误!大神帮忙分析下原因

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼查看日志结果如下&#xff1a;(看不懂。。。)[2874:052C][2018-07-05T22:18:14]e000: Error 0x80070643: Failed to install MSI package.[2874:052C][2018-07-05T22:18:14]e000: Error 0x80070643: Failed to configure per-user …

信息安全学习路线图_Python学习图谱:学习到困惑的时候可以参考的图谱

很多同学都想学习Python&#xff0c;最近就连地产大佬潘石屹都要学Python。刚刚开始学习Python的同学来说&#xff0c;不知道从哪里下手&#xff0c;学习起来比较困惑&#xff0c;没有找到一个好的学习方法&#xff0c;没有高手带路&#xff0c;没有人督促你学习&#xff0c;或…

如何更新mysql数据库字段_如何使用MySQL一个表中的字段更新另一个表中字段

1&#xff0c;修改1列update student s, city cset s.city_name c.namewhere s.city_code c.code;2&#xff0c;修改多个列update a, bset a.titleb.title, a.nameb.namewhere a.idb.id•子查询update student s set city_name (select name from city where code s.city_c…

mysql到mysqli转变表_利用mysql和mysqli取得mysql的所有数据库和库中的所有表

/*** mysqli op mysql demo*//***公用函数*//***功能&#xff1a;列出一个数据库的所有表*param$dbname*param$con*/functionlist_tables($dbname,$con){mysql_select_db($dbname,$con)or die("选择数据库失败!");$res mysql_query("SHOW TABLES");$table…

zabbixdocker里的mysql_docker zabbix安装部署(数据库和web及zabbix服务都用docker版)

一、docker zabbix相关镜像下载分别docker pull (mysql:5.7 、zabbix/zabbix-agent 、zabbix/zabbix-server-mysql 、zabbix/zabbix-web-nginx-mysql)[rootald8 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 98455b9624a9 12 days ago 372MBzabbix/zabbix…

mysql gui 修改密码_MySQL修改root密码的各种方法整理

整理了以下四种在MySQL中修改root密码的方法,可能对大家有所帮助!方法1&#xff1a; 用SET PASSWORD命令mysql -u rootmysql> SET PASSWORD FOR rootlocalhost PASSWORD(newpass);方法2&#xff1a;用mysqladminmysqladmin -u root password "newpass"如果root已…

mysql 物理结构设计_数据库的物理结构设计指的是什么?

Log Goup ID&#xff0c;可能会配置多个redo组&#xff0c;每个组对应一个id&#xff0c;当前都是0&#xff0c;占用4字节Start LSN&#xff0c;这个redo log文件开始日志的lsn&#xff0c;占用8字节Log File Number&#xff0c;总是为0&#xff0c;占用4字节Created By&#x…

mysql 监控 开源_强大的开源企业级数据库监控利器Lepus

Lepus监控简单介绍开源企业级数据库监控系统简洁、直观、强大的开源数据库监控系统&#xff0c;MySQL/Oracle/MongoDB/Redis一站式性能监控&#xff0c;让数据库监控更简单简单介绍&#xff1a;Lepus(天兔)数据库企业监控系统是一套由专业DBA针对互联网企业开发的一款专业、强大…

python的fopen函数_linux c函数(fgets,fputs,fopen)

clearerr(清除文件流的错误旗标)相关函数 feof表头文件 #include定义函数 void clearerr(FILE * stream);函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。返回值fclose(关闭文件)相关函数 close&#xff0c;fflush&#xff0c;fopen&#xff0c;setbuf表头文…

java整数转字符串_Java整型与字符串相互转换(转)

1如何将字串 String 转换成整数 int?A. 有两个方法:1). int i Integer.parseInt([String]); 或i Integer.parseInt([String],[int radix]);2). int i Integer.valueOf(my_str).intValue();注: 字串转成 Double, Float, Long 的方法大同小异.2 如何将整数 int 转换成字串 St…

景点门票销售系统系统java_某景点门票销售管理系统

【实例简介】可用于学校实训课大作业&#xff0c;有数据库有文档 可用于学校实训课大作业&#xff0c;有数据库有文档 可用于学校实训课大作业&#xff0c;有数据库有文档 可用于学校实训课大作业&#xff0c;有数据库有文档【实例截图】【核心代码】某景点门票销售管理系统└─…

java字符串的哈希码_获取Java中字符串的哈希码

该hashCode()方法用于获取字符串的哈希码。此方法不接受任何参数&#xff0c;因为它是默认方法&#xff0c;并且它返回哈希码值。hashCode()给出了演示Java方法的程序&#xff0c;如下所示&#xff1a;示例import java.io.*;public class Demo {public static void main(String…

java sql2008的增删改查_SQL server数据库增删改查练习

--创建测试数据create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))insert into Student values(01 , N赵雷 , 1990-01-01 , N男)insert into Student values(02 , N钱电 , 1990-12-21 , N男)insert into Student values(03 , N孙风 , 1…

java script中==和===_Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑...

判断两个变量是否相等在任何编程语言中都是非常重要的功能。JavaScript 提供了 和 两种判断两个变量是否相等的运算符&#xff0c;但我们开始学习的时候 JavaScript 的时候&#xff0c;就被一遍又一遍的告知&#xff1a; 要求变量的类型和值均相等&#xff0c;才能返回true。…