Java数据库转JSON文件仅导出最后一行数据问题求助
解决导出数据库数据到JSON仅保留最后一行的问题
嘿,我看你遇到的问题是用Java导出数据库数据到JSON时,最终文件里只有最后一行数据,这问题我之前做项目的时候也踩过坑,咱们来一步步解决它~
问题根源
你的代码里把JSONObject jobj = new JSONObject();放在了while(rs.next())循环的外面,这就意味着每次循环你都是在同一个JSON对象里覆盖之前的数据,循环结束后自然就只剩最后一行的内容啦。而且要存储多行数据,咱们得用JSONArray来装多个JSONObject才行。
修改后的完整代码
public void getData() throws IOException { try { String query = "select * from Productos"; rs = st.executeQuery(query); System.out.println("Prueba de funcionamiento"); // 用JSONArray来存储所有产品的JSON对象 JSONArray productArray = new JSONArray(); while(rs.next()) { // ********关键:每次循环创建新的JSONObject,避免覆盖******** JSONObject productObj = new JSONObject(); // 读取数据库字段值(这里补全你实际需要的所有字段) String refPro = rs.getString("Cod.RefPro"); String productName = rs.getString("Nombre"); // 示例:如果有数字类型字段,比如价格 // double price = rs.getDouble("Precio"); // 将字段存入当前产品的JSON对象 productObj.put("Cod.RefPro", refPro); productObj.put("Nombre", productName); // productObj.put("Precio", price); // 将当前产品对象加入数组 productArray.put(productObj); } // 输出验证结果 System.out.println("导出的JSON数据:"); System.out.println(productArray.toString(4)); // 带缩进,更易读 // 将JSON数据写入文件 try (FileWriter writer = new FileWriter("productos_exportados.json")) { writer.write(productArray.toString(4)); writer.flush(); System.out.println("数据已成功导出到文件!"); } } catch (SQLException e) { // 别忘了处理SQL异常,方便排查问题 System.err.println("数据库查询出错:"); e.printStackTrace(); } }
核心改进点
- 循环内创建JSONObject:每次遍历数据库行时都新建一个JSON对象,这样每一行的数据都会被单独存储,不会被后续行覆盖
- 用JSONArray管理多个对象:把每一行对应的JSONObject加入数组,最终就能得到包含所有数据的JSON数组
- 健壮的异常处理:新增了SQL异常捕获,方便你排查数据库连接或查询的问题
- 友好的文件写入:用try-with-resources语法自动关闭文件流,避免资源泄漏,同时生成带缩进的JSON,可读性更强
额外提示
- 确保你使用的JSON库(比如org.json)已经正确引入项目依赖
- 数据库字段名要和
rs.getString()里的参数完全一致,大小写也要注意(取决于数据库配置) - 如果需要导出大量数据,建议分批处理或使用流式写入,避免内存占用过高
内容的提问来源于stack exchange,提问作者Gyswus
相关产品推荐
相关产品推荐

