You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中查询MySQL表指定列所有值并完成求和计算

两种实现方案

方案1:SQL层面直接求和(金融类应用优先推荐)

金融场景数据量通常较大,直接使用MySQL内置的SUM函数计算,可避免全量拉取ID到JVM内存,性能更高,也能减少数据传输过程中出错的概率。
SQL语句调整为:
SELECT SUM(id) AS id_total FROM name_table;
Java实现示例(JDBC版本):

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.math.BigDecimal;

// 金融类场景统一使用BigDecimal存储金额,避免浮点精度丢失
public class SumIdDemo {
    public static void main(String[] args) {
        // 数据库连接参数根据实际情况替换
        String url = "jdbc:mysql://你的数据库地址:3306/库名?useUnicode=true&characterEncoding=utf8";
        String user = "数据库账号";
        String password = "数据库密码";
        BigDecimal totalId = BigDecimal.ZERO;

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT SUM(id) AS id_total FROM name_table")) {
            if (rs.next()) {
                totalId = rs.getBigDecimal("id_total");
            }
            System.out.println("id列求和结果:" + totalId);
        } catch (Exception e) {
            e.printStackTrace();
            // 实际生产环境需完善异常处理逻辑,如事务回滚、异常告警等
        }
    }
}

方案2:Java内存中累加(仅适合数据量极小的场景)

如果业务要求必须先拉取所有ID再做累加,实现如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.math.BigDecimal;

public class SumIdInJavaDemo {
    public static void main(String[] args) {
        String url = "jdbc:mysql://你的数据库地址:3306/库名?useUnicode=true&characterEncoding=utf8";
        String user = "数据库账号";
        String password = "数据库密码";
        BigDecimal totalId = BigDecimal.ZERO;

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT id FROM name_table")) {
            while (rs.next()) {
                BigDecimal id = rs.getBigDecimal("id");
                totalId = totalId.add(id);
            }
            System.out.println("id列求和结果:" + totalId);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

金融类应用注意事项:

  • 所有金额类字段禁止使用int、long、float、double类型存储和计算,必须使用BigDecimal,避免整数溢出或者浮点精度丢失导致资金计算错误
  • 求和操作建议优先在数据库层面完成,减少不必要的数据IO,同时数据库的聚合函数计算稳定性更高
  • 生产环境需要添加对应的SQL监控、异常重试、结果校验逻辑,避免统计结果出错

内容的提问来源于stack exchange,提问作者Sasmita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:18:03