数据库数据存入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
相关产品推荐
相关产品推荐

