准备好的语句返回错误的值

Posted

技术标签:

【中文标题】准备好的语句返回错误的值【英文标题】:Prepared Statement return wrong values 【发布时间】:2014-01-22 17:01:40 【问题描述】:

我有一个使用 HSQLDB 的 JAVA 应用程序。有一个名为“marks”的表,其中包含一个名为“mark”的整数列。如果我使用 HSQLDB DatabaseManager 运行以下查询: SELECT AVG(CAST(mark as FLOAT)), SUM(mark) FROM tags WHERE sid=5 AND suid=8 DBM 返回正确的值: 1.5和3;对于标记 1 和 2。

如果我使用以下 JAVA 代码通过相同的查询读出此数据,java 总是打印出 2。对于平均值和总和。我不知道我做错了什么。也许你可以帮助我。

        double avg = 0;
    PreparedStatement stmt = dbcn.prepareStatement("SELECT AVG(CAST(mark as FLOAT)), SUM(mark) FROM marks WHERE sid=? AND suid=?");
    stmt.setInt(1, 5);
    stmt.setInt(2, 8);
    ResultSet gARS = stmt.executeQuery();
    while(gARS.next())
        avg = gARS.getDouble(1);
        System.out.println(gARS.getInt(2));
    
    return avg;

【问题讨论】:

【参考方案1】:

System.out 应该首先打印 SUM:3。 然后该方法返回 avg,1.5。似乎 avg 是四舍五入的。

也许你有类似的东西:

double avg = callToDB(...);
System.out.printf("%10.0f", avg); // ERROR .0 should be at least .1

所以检查格式字符串。如果向下取整,则可能是 int 类型转换。

【讨论】:

感谢您的快速答复。我试过你的建议,但它仍然四舍五入。我用 2 x 标记 1 和 1 x 标记 2 试了一下,现在它说 1。:/ 啊,我想显示可能的错误,0 位小数的格式导致四舍五入。就像现在 1 换 1.333 一样。 好的,就是这样。非常感谢

以上是关于准备好的语句返回错误的值的主要内容,如果未能解决你的问题,请参考以下文章

PHP + SQL 登录系统。返回错误的值[重复]

准备好的 SQL LIKE 语句不返回所有结果

它是 Mysqli 中的错误吗 - 部分结果

Perl DBI 何时关闭准备好的语句

使用 PDO 准备好的语句 MySQL 错误

如何摆脱 MySQL 错误“需要重新准备准备好的语句”