SUM结果在MySQL中的数据类型
-
11-07-2019 - |
题
我有一个有点问题用SUM当转换一个MySQL查询的结果到一个Java类。
当执行在MySQL简单SUM
SELECT SUM(price) FROM cakes WHERE ingredient = 'chocolate';
与price
是整数,看来该SUM
有时返回一个字符串和有时的整数,取决于JDBC驱动程序的版本。
显然,服务器不告诉JDBC驱动程序SUM
的结果是一个字符串,并且JDBC驱动程序有时“方便”转换成一个整数。 (见马克Matthews的解释)。
在Java代码使用了一些的BeanInfo 和反思以自动地填写豆(S)与查询的结果(列表)。但是,这很明显,如果数据类型,其中应用程序被部署服务器之间的不同不能工作。
我不在乎我阉得到一个字符串或整数,但我想总有相同的数据类型,或至少提前知道我会得到它的数据类型。
时有一些方法来知道哪些数据类型将一个MySQL SUM
从Java代码中被退回?还是没有人知道一些更好的方式来处理这件事?
解决方案
这只是一个猜测,但也许铸造到整数将迫使MySQL来始终告诉它是一个整数。
SELECT CAST(SUM(price) AS SIGNED) FROM cakes WHERE ingredient = 'marshmallows';
其他提示
我从来没有与MySQL合作过,所以我不能说为什么,但如果你说:
ResultSet rs = statement.executeQuery("SELECT SUM(price) FROM cakes WHERE ingredient = 'chocolate'");
int sum = 0;
if(rs.next())
size = Integer.parseInt(rs.getString(1));
那么你不应该有问题,无论返回的数据类型作为文档说:
字符串的getString(INT columnIndex)抛出的SQLException
结果,检索此ResultSet对象的当前行中指定列的值的作为String 在Java编程语言
我发现COALESCE(SUM(price),0)
好总是确保现场返回0,如果没有结果。
不隶属于 StackOverflow