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"; List<map> rows = 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); }</map>
表字段“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 <br>DataBaseA打印的结果:<br>sumNumberOfOneDay, DECIMAL<br><br>DataBaseB打印的结果:<br>sumNumberOfOneDay, DOUBLE<br><br>基本可判断是MySQL的问题<br><br>网上搜索一下,果然:<br><pre name="code" class="java"> 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:
List<somebean> list = getJdbcTemplate().query(sql, new BeanPropertyRowMapper(SomeBean.class)); </somebean>
应该尽量采用方法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; }

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

可以通过以下步骤打开 phpMyAdmin:1. 登录网站控制面板;2. 找到并点击 phpMyAdmin 图标;3. 输入 MySQL 凭据;4. 点击 "登录"。

使用 Navicat Premium 创建数据库:连接到数据库服务器并输入连接参数。右键单击服务器并选择“创建数据库”。输入新数据库的名称和指定字符集和排序规则。连接到新数据库并在“对象浏览器”中创建表。右键单击表并选择“插入数据”来插入数据。

可在 Navicat 中通过以下步骤新建 MySQL 连接:打开应用程序并选择“新建连接”(Ctrl N)。选择“MySQL”作为连接类型。输入主机名/IP 地址、端口、用户名和密码。(可选)配置高级选项。保存连接并输入连接名称。

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

Redis 使用单线程架构,以提供高性能、简单性和一致性。它利用 I/O 多路复用、事件循环、非阻塞 I/O 和共享内存来提高并发性,但同时存在并发性受限、单点故障和不适合写密集型工作负载的局限性。

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。
