SUM的数据类型导致MySQL

时间:2008-11-27 09:14:38

标签: java mysql sum return-type

使用SUM时,我将MySQL查询的结果转换为Java类时遇到了一些问题。

在MySQL中执行简单的SUM时

SELECT SUM(price) FROM cakes WHERE ingredient = 'chocolate';

price是一个整数,SUM有时会返回一个字符串,有时会返回一个整数,具体取决于JDBC驱动程序的版本。

显然,服务器确实告诉JDBC驱动程序SUM的结果是一个字符串,而JDBC驱动程序有时“方便地”将其转换为整数。 (见Marc Matthews' explanation)。

Java代码使用一些BeanInfoIntrospection来自动填充带有查询结果的bean(列表)。但是,如果部署应用程序的服务器之间的数据类型不同,这显然无效。

我不在乎我得到一个字符串或整数,但我想总是拥有相同的数据类型,或者至少事先知道我将获得哪种数据类型。

有没有办法知道MySQL代码中MySQL SUM将返回哪种数据类型?或者有没有人知道一些更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:10)

这只是一个猜测,但是可能转换为整数会强制MySQL总是告诉它是一个整数。

SELECT CAST(SUM(price) AS SIGNED) FROM cakes WHERE ingredient = 'marshmallows';

答案 1 :(得分:2)

我之前从未使用过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));

然后,无论返回的数据类型如何,您都不会遇到问题,如文档所示:

  

String getString(int columnIndex)throws SQLException


以String 的当前行中指定列的值>使用Java编程语言

答案 2 :(得分:-1)

我发现COALESCE(SUM(price),0)总是确保如果没有结果就返回0,那么

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