SUM的数据类型导致MySQL
我在使用SUM时将MySQL查询的结果转换为Java类时遇到了一些问题。
在MySQL中执行简单的SUM时
SELECT SUM(price) FROM cakes WHERE ingredient = 'chocolate';
如果price
是一个整数,则SUM
似乎有时会返回一个字符串,有时会返回一个整数,具体取决于JDBC驱动程序的版本。
显然,服务器确实告诉JDBC驱动程序SUM
的结果是一个字符串,并且JDBC驱动程序有时“方便地”将其转换为整数。 (见Marc Matthews的解释 )。
Java代码使用一些BeanInfo和Introspection来自动填充查询结果的bean(列表)。 但是,如果部署应用程序的服务器之间的数据类型不同,这显然无法工作。
我不在乎我得到一个字符串或整数,但我想总是拥有相同的数据类型,或者至少事先知道我将获得哪种数据类型。
有没有办法知道MySQL代码中的MySQL SUM
将返回哪种数据类型? 或者有没有人知道一些更好的方法来解决这个问题?
这只是一个猜测,但也许转换为整数将迫使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));
然后,无论返回的数据类型如何,您都不应该遇到问题,因为文档说:
String getString(int columnIndex)抛出SQLException
以Java编程语言中String的forms检索此ResultSet对象的当前行中指定列的值
我发现COALESCE(SUM(price),0)
总是确保如果没有结果,则字段返回0。
请参阅: http : //lists.mysql.com/mysql/177427