代码之家  ›  专栏  ›  技术社区  ›  Pieter

mysql中sum result的数据类型

  •  3
  • Pieter  · 技术社区  · 16 年前

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

    在MySQL中执行简单求和时

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

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

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

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

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

    有没有办法知道MySQL将返回哪个数据类型? 从Java代码里面?或者有人知道更好的方法来处理这个问题吗?

    3 回复  |  直到 15 年前
        1
  •  10
  •   Vinko Vrsalovic    16 年前

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

    SELECT CAST(SUM(price) AS SIGNED) FROM cakes WHERE ingredient = 'marshmallows';
    
        2
  •  2
  •   Experiment.Fail.Learn.Repeat.    16 年前

    我以前从未使用过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编程语言中
        3
  •  -1
  •   Treffynnon    15 年前

    我发现 COALESCE(SUM(price),0) 如果没有结果,则始终确保字段返回0。

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