【问题标题】:How to retrieve the resultset of COUNT() SUM() AVG() MIN() MAX() statements?如何检索 COUNT() SUM() AVG() MIN() MAX() 语句的结果集?
【发布时间】:2013-01-05 06:31:26
【问题描述】:

我的系统在检索数据库中的某些值时遇到问题。我想获得特定字段中值的摘要。这是我检索值的代码:

public void insertToClientSummary(){
    sql = "SELECT COUNT(genClientID), SUM(principal), SUM(interest), SUM(totalPayment), SUM(totalBal) FROM client_info";
    try {
        stmt = conn.prepareStatement(sql);
        rs = stmt.executeQuery();
        String titles[] = new String [4];
        titles[0] = "Total Clients";
        titles[1] = "Total Loan Book";
        titles[2] = "Total Interests";
        titles[3] = "Total Payment";
        titles[4] = "Total Balance";
        rs.next();
        for (int ctr=0;ctr<=5;ctr++){
            String sql2 = "INSERT INTO client_summary (title, sumValues) VALUES ('"+titles[ctr]+"','')";
            PreparedStatement stmt2 = conn.prepareStatement(sql2);
            stmt2.executeUpdate();
            ctr++;
            sql = "UPDATE client_summary SET sumValues = '"+String.valueOf(rs.getDouble(ctr))+"'";
            stmt = conn.prepareStatement(sql);
            stmt.executeUpdate();
            ctr--;
        }
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(null, "Client Summary Query Exception");
    }
}

顺便说一句,我还包括在上述client_summary 表中插入新值的代码。但我认为我在第一次查询时遇到了异常。对正确检索数据有任何想法吗?

【问题讨论】:

  • 您使用的数据库是什么?
  • mysql5 和 phpMyAdmin 是我的 DBMS

标签: java mysql sql database resultset


【解决方案1】:

这个解决方案对我不起作用。我不知道我在 SQL 查询中是否有问题,但如果我在数据库上运行它,它会返回正确的值。

SELECT ((SUM(Y1) * 20) / 60) as heat FROM logger.AcondData where (time > '2013-10-12 0:0:0' and time < '2013-10-12 23:59:59') and Y1 = 1 and Y8 = 0;

这里是从 ResultSet 获取的。

java.sql.PreparedStatement preparedStatement = mConnection.prepareStatement(query);
ResultSet resultSet = preparedStatement.executeQuery();

while (resultSet.next())
{
    printWriter.println("<h1>Heating time: " + resultSet.getString("heat") + " minut");
}

编辑1: 如果我删除最后两个条件,它会起作用。

SELECT ((SUM(Y1) * 20) / 60) as heat FROM logger.AcondData where (time > '2013-10-12 0:0:0' and time < '2013-10-12 23:59:59');

Y1 和 Y8 是 TINYINT(1)

编辑2: 现在它的工作,看起来问题出在数据库数据中。从远程数据库导入数据后就OK了。

【讨论】:

    【解决方案2】:

    您可以使用as name(别名)来获取它们。示例

    SELECT COUNT(genClientID) as cnt, .........
    

    然后

       rs.getString("cnt");
    

    【讨论】:

    • 这通常称为“别名”。
    • rs.get(cnt);cnt 出现错误cannot find symbolcnt 被初始化为String 然后get 出现错误cannot find symbol
    • sql = "SELECT COUNT(genClientID) as clients, SUM(principal) as prin, SUM(interest) as intr, SUM(totalPayment) as totPay, SUM(totalBal) as totBal FROM client_info"; try { stmt = conn.prepareStatement(sql); rs = stmt.executeQuery(); rs.first(); rs.get("clients"); 找不到get 符号
    • @JayMarz:为什么会有单引号?
    • @JayMarz: 应该是 getString("clients");不获取(“客户”);
    【解决方案3】:

    如果您只想在汇总表中插入聚合值,则可以使用 insert select。 这样你就不需要结果集迭代。例如

    INSERT INTO summary(id,total,max) SELECT count(id),sum(principal),sum(interest) FROM client_info
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 2015-11-27
      相关资源
      最近更新 更多