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

Java中如何将JSON对象转换为ResultSet及Java8升级后JDBC ODBC桥替代方案

JSON转ResultSet实现方案

是可以直接将JSON对象转换为标准ResultSet对象的,推荐使用JDK自带的离线CachedRowSet实现,无需引入额外的重型依赖,具体实现逻辑如下:

  1. 先解析JSON数据,提取表头字段列表、所有行的数据集合
  2. 初始化CachedRowSet实例,配置列名、列类型等元数据
  3. 遍历所有行数据,依次写入CachedRowSet中,最终返回的实例本身就是ResultSet的子类,可直接对接原有遗留代码

参考代码示例:

import com.sun.rowset.CachedRowSetImpl;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetMetaDataImpl;
import java.sql.Types;
import java.util.List;
import java.util.Map;

public class JsonToResultSetConverter {
    public CachedRowSet convert(List<String> headerList, List<Map<String, Object>> jsonRowList) throws Exception {
        CachedRowSet rowSet = new CachedRowSetImpl();
        // 配置ResultSet元数据
        RowSetMetaDataImpl metaData = new RowSetMetaDataImpl();
        metaData.setColumnCount(headerList.size());
        for (int i = 0; i < headerList.size(); i++) {
            metaData.setColumnName(i + 1, headerList.get(i));
            // 可根据JSON值的实际类型调整列类型,比如日期、数字对应不同的Types枚举值
            metaData.setColumnType(i + 1, Types.VARCHAR);
        }
        rowSet.setMetaData(metaData);

        // 填充行数据
        for (Map<String, Object> row : jsonRowList) {
            rowSet.moveToInsertRow();
            for (int i = 0; i < headerList.size(); i++) {
                rowSet.updateObject(i + 1, row.get(headerList.get(i)));
            }
            rowSet.insertRow();
        }
        // 指针移到第一行之前,兼容原有ResultSet遍历逻辑
        rowSet.beforeFirst();
        return rowSet;
    }
}

如果运行环境不支持com.sun.rowset.CachedRowSetImpl,可以替换为Apache Commons DbUtils提供的ResultSetImpl实现,逻辑完全一致。

更优的替代方案(无需JSON转换中间环节)

直接从Excel文件生成ResultSet,省去JSON转换的性能损耗和类型丢失风险,推荐以下几种实现方式:

  • Apache POI + CachedRowSet:用POI读取Excel的单元格数据,直接填充到上述的CachedRowSet中,适合需要自定义Excel解析逻辑的场景,整体改造成本很低
  • Excel专用JDBC驱动:直接使用现成的开源Excel JDBC驱动(比如xlsjdbc、ucanaccess),仅需要替换原有JDBC连接配置为Excel文件路径,执行查询即可直接拿到标准ResultSet,原有代码几乎不需要修改
  • 嵌入式内存数据库中转:将Excel数据导入到H2、SQLite等嵌入式内存库的临时表中,再通过JDBC查询拿到ResultSet,适合需要对Excel数据做复杂过滤、关联计算的场景
适配注意事项
  • 所有方案返回的都是java.sql.ResultSet接口的标准实现,原有依赖ResultSet的业务逻辑不需要做任何修改
  • 要注意Excel单元格类型和ResultSet列类型的匹配,避免调用getInt、getDate等类型方法时出现转换异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:36:03