我有一个有点问题用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,如果没有结果。

请参阅: http://lists.mysql.com/mysql/177427

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top