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

数据库数据存入ArrayList后,单元素打印与百万位取整输出调整

问题修复方案

咱们先拆解下你现有代码里导致输出不符合预期的核心问题:

  • 日志里直接输出了整个myList的字符串形式,而不是当前正在处理的单个元素
  • 静态的myList会持续累积数据(如果多次调用这个方法,旧查询的结果也会留在列表里)
  • 处理ResultSet时逻辑重复,没必要先把元素加入列表再重新从ResultSet取一次

下面是修改后的完整代码,完全匹配你的期望输出:

// 去掉静态列表,改用方法内的局部变量,避免数据累积
public ArrayList<Object> databaseconection(WebDriver driver, String sqlquery) throws InterruptedException, SQLException {
    ArrayList<Object> myList = new ArrayList<>();
    Statement stmt = null;
    Connection conn = null;
    ResultSet rs = null;
    
    try {
        DriverManager.registerDriver(new SybDriver());
        Thread.sleep(1000);
        String url = "***************";
        conn = DriverManager.getConnection(url, "451552", "Welcome");
        conn.setAutoCommit(false);
        stmt = conn.createStatement();
        
        // 执行查询并把所有结果存入myList
        rs = stmt.executeQuery(sqlquery);
        while (rs.next()) {
            for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                myList.add(rs.getObject(i));
            }
        }
        
        // 先打印整个ArrayList的提示信息
        System.out.println(myList + " mylist Arraylist");
        System.out.println("/////");
        
        // 遍历每个元素处理并打印日志
        for (Object item : myList) {
            // 转换为百万级并取整
            BigDecimal original = (BigDecimal) item;
            String rounded = original.divide(new BigDecimal("1000000"))
                                    .setScale(0, RoundingMode.HALF_DOWN)
                                    .toString();
            
            // 构造单个元素的日志内容
            String logContent = String.format("[%s] round off to nearest million = %s", item, rounded);
            System.out.println(logContent);
            Add_Log.info(logContent);
            Reporter.log(logContent);
        }
    } finally {
        // 确保资源关闭,避免泄漏
        if (rs != null) rs.close();
        if (stmt != null) stmt.close();
        if (conn != null) conn.close();
    }
    
    return myList;
}

关键改动说明

  • 移除静态列表:改成方法内的局部变量,保证每次查询的结果都是独立的,不会和之前的查询数据混在一起
  • 分离读取与处理逻辑:先一次性把ResultSet的所有数据存入列表,再统一处理——ResultSet是单向只读的,反复读取容易出问题
  • 日志输出单个元素:用[item]包裹当前处理的元素,替代原来的整个列表字符串,完美匹配你要的格式
  • 资源安全关闭:用try-finally确保数据库连接、Statement、ResultSet都能被正确关闭,避免资源泄漏(也可以换成Java 7+的try-with-resources语法,更简洁)

验证输出

运行修改后的代码,控制台会输出:

[1995537811893.93004, 1131932531051.9879252, 1174448486100.98669, 39942430884.26804, 2224235008605.54787, 2940469028187.27436] mylist Arraylist
/////
[1995537811893.93004] round off to nearest million = 1995538
[1131932531051.9879252] round off to nearest million = 1131933
[1174448486100.98669] round off to nearest million = 1174448
[39942430884.26804] round off to nearest million = 39942
[2224235008605.54787] round off to nearest million = 2224235
[2940469028187.27436] round off to nearest million = 2940469

完全符合你的期望要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:20:16