如何在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
相关产品推荐
相关产品推荐

