【问题标题】:SQL Sum Query works in PHPmyAdmin, but not in Java resutsetSQL Sum Query 在 PHPmyAdmin 中有效,但在 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 问题。任何帮助将不胜感激。

【问题讨论】:

    标签: java sql jdbc resultset


    【解决方案1】:

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

    不是刻薄的意思,但也许您不应该创建一个新帐户来再次回答您已删除的问题 (https://stackoverflow.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")
    

    而是使用连接对象。

    我建议您执行以下操作:

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 1970-01-01
      • 2012-11-06
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多