3

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

在 MySQL 中执行简单 SUM 时

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

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

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

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

我不在乎我得到的是字符串还是整数,但我希望始终拥有相同的数据类型,或者至少提前知道我将获得哪种数据类型。

有什么方法可以知道 MySQLSUM从 Java 代码中返回哪种数据类型?或者有谁知道一些更好的方法来处理这个问题?

4

3 回答 3

10

这只是一个猜测,但也许转换为整数会迫使 MySQL 总是告诉它是一个整数。

SELECT CAST(SUM(price) AS SIGNED) FROM cakes WHERE ingredient = 'marshmallows';
于 2008-11-27T09:23:28.683 回答
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));

Then you should not have a problem regardless of the returned datatype as the documentation says:

String getString(int columnIndex) throws SQLException


Retrieves the value of the designated column in the current row of this ResultSet object as a String in the Java programming language

于 2008-11-27T10:21:48.813 回答
-1

I found COALESCE(SUM(price),0) good for always ensuring the field returned 0 if there was no result.

See: http://lists.mysql.com/mysql/177427

于 2009-10-28T11:43:12.067 回答