首页 > 解决方案 > SQL Sum Query 在 PHPmyAdmin 中有效,但在 Java resutset 中无效

问题描述

我有一个名为“事务”的表。它有 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 问题。任何帮助将不胜感激。

标签: javasqljdbcresultset

解决方案


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

不是刻薄的意思,但也许您不应该创建一个新帐户来再次回答您已删除的问题(https://stackoverflow.com/questions/59570469)-> Google 缓存-此外,您正在使用的数据库类给离开你的“真实”帐户(如何检索代表结果集中总和的“总”变量) - 所以我再次投票结束这个问题。

但是,至少有一些提示:

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

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

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

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

而是使用连接对象。

我建议您执行以下操作:

  1. 阅读如何用 Java 连接数据库
  2. 阅读如何创建和执行准备好的语句
  3. 阅读如何从结果集中提取结果
  4. 告知自己有关参数绑定的信息(避免 SQL 注入)
  5. 利润!

所有这些主题都在 stackoverflow 上得到了很好的介绍。


推荐阅读