SQL Sum Query 在 PHPmyAdmin 中有效,但在 Java resutset 中无效

Posted

技术标签:

【中文标题】SQL Sum Query 在 PHPmyAdmin 中有效,但在 Java resutset 中无效【英文标题】:SQL Sum Query works in PHPmyAdmin, but not in Java resutset 【发布时间】:2020-01-06 02:43:15 【问题描述】:

我有一个名为“事务”的表。它有 5 个属性:Date、Description、Amount、Clientname、Transaction_ID,其中 Transaction_ID 是主键。在示例数据中,客户名称“John Smith”有两笔交易,他每笔花费 100.10 和 56.56。 SQL Query 在 phpMyAdmin 中返回 156.66 的预期结果,但 JDBC 似乎无法在 ResultSet 中识别它。

这是我的代码:

 public void calculate_client_spending() throws SQLException 
    ConnectionClass Databaseloader = new ConnectionClass();
    Databaseloader.getConnection();
    String sql = "SELECT SUM(Amount) AS total FROM Transactions WHERE Clientname = 'John Smith';";

    ResultSet rs = Databaseloader.executeSQLRequestCommand(sql);
    //  rs.next();

    // System.out.println(sum);
    ResultSetMetaData rsMetaData = rs.getMetaData();
    int numberOfColumns = rsMetaData.getColumnCount();
    System.out.println(numberOfColumns);
    // get the column names; column indexes start from 1
    for (int i = 1; i < numberOfColumns + 1; i++) 
        String columnName = rsMetaData.getColumnName(i);

        // Get the name of the column's table name
        if ("total".equals(columnName)) 
            System.out.println("Bingo!");
            rs.last();
            int count = rs.getRow();
            rs.beforeFirst();
            System.out.println(count);
            while (rs.next()) 
                Results_trasactions.setText("");
                System.out.println("The total profits today are: " + rs.getString(1));
            
        

    

此查询在此示例中返回 null,但如果我执行 rs.getDouble(1),它将返回 0。知道这里可能存在什么问题吗?我能够使类似的 SUM 查询工作,例如所有客户端的 SUM 和 WHERE 子句似乎适用于我的主键,但是即使 SQL 在 PHPmyadmin 中有效,这个特定的 Query JDBC 似乎也不喜欢它这让我想相信这是一个 Java 问题而不是 SQL 问题。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

不幸的是,这对于评论来说太长了:

不是刻薄的意思,但也许您不应该创建一个新帐户来再次回答您已删除的问题 (https://***.com/questions/59570469) -> Google Cache - 而且,您使用的数据库类会泄露您的“真实" 帐户 (How to retrieve the "total" variable representing a sum in a resultset) - 所以我再次投票结束这个问题。

但是,至少是一些提示:

ConnectionClass Databaseloader = new ConnectionClass();
Databaseloader.getConnection();

Databaseloader 不是任何默认的 JDBC 类,而是一些(糟糕的)编写的静态类,对我来说它看起来像是一个奇怪的包装器。你可以做到,但无论如何你都不会静态地做到这一点。通过将这些方法扔到 Google 中,您会发现:几乎什么都没有。

对于 mysql,您将获得这样的数据库连接:

Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "sa", "sa")

而是使用连接对象。

我建议您执行以下操作:

    了解如何使用 Java 连接数据库 了解如何创建和执行准备好的语句 了解如何从结果集中提取结果 了解参数绑定(避免 SQL 注入) 利润!

*** 很好地涵盖了所有这些主题。

【讨论】:

以上是关于SQL Sum Query 在 PHPmyAdmin 中有效,但在 Java resutset 中无效的主要内容,如果未能解决你的问题,请参考以下文章

帮助 SQL SUM()?

选择一天中指定时间段内的数据 SQL Query

powerquery的sum公式

LeetCode Range Sum Query - Mutable

LeetCode 303. Range Sum Query - Immutable

303. Range Sum Query - Immutable