当前位置: 首页 > news >正文

jdbcTemplate使用ListMapString,Object 接收 列名英文成了大写

关于 JdbcTemplate 查询结果中列名变成大写的问题,这是由于数据库和 JDBC 驱动的默认行为导致的。以下是几种解决方案:
问题原因
数据库驱动行为:某些数据库驱动(如 Oracle)默认将列名转换为大写
JDBC 规范:JDBC 规范允许驱动程序以特定方式处理列名大小写
列名引用方式:使用 SELECT column 而不是 SELECT "column" 可能导致大小写处理问题
解决方案

  1. 使用别名保持原始大小写````
    String sql = "SELECT user_id as "userId", user_name as "userName" FROM users";
    List<Map<String, Object>> result = jdbcTemplate.queryForList(sql);

  2. 配置数据源保持列名大小写(以 Oracle 为例)
    // 在连接字符串中添加属性
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    Properties props = new Properties();
    props.setProperty("user", "username");
    props.setProperty("password", "password");
    props.setProperty("oracle.jdbc.mapNameToUpperCase", "false"); // 保持大小写

  3. 自定义 RowMapper 处理列名
    List<Map<String, Object>> result = jdbcTemplate.query(sql, new RowMapper<Map<String, Object>>() {
    @Override
    public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
    Map<String, Object> row = new LinkedHashMap<>();
    ResultSetMetaData metaData = rs.getMetaData();
    int columnCount = metaData.getColumnCount();

     for (int i = 1; i <= columnCount; i++) {String columnName = metaData.getColumnLabel(i); // 使用 getColumnLabel 保持别名row.put(columnName, rs.getObject(i));}return row;
    

    }
    });

  4. 后处理转换列名
    List<Map<String, Object>> originalResult = jdbcTemplate.queryForList(sql);
    List<Map<String, Object>> processedResult = originalResult.stream().map(row -> {
    Map<String, Object> newRow = new LinkedHashMap<>();
    row.forEach((key, value) -> {
    // 根据需要转换列名,例如转为小写或驼峰命名
    String newKey = key.toLowerCase(); // 或其他转换逻辑
    newRow.put(newKey, value);
    });
    return newRow;
    }).collect(Collectors.toList());

  5. 使用 ColumnMapRowMapper 自定义实现
    public class CaseSensitiveColumnMapRowMapper implements RowMapper<Map<String, Object>> {
    @Override
    public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
    Map<String, Object> map = new LinkedHashMap<>();
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnCount = rsmd.getColumnCount();

     for (int index = 1; index <= columnCount; index++) {String column = rsmd.getColumnLabel(index); // 使用 label 而非 namemap.put(column, rs.getObject(index));}return map;
    

    }
    }

// 使用方式
List<Map<String, Object>> result = jdbcTemplate.query(sql, new CaseSensitiveColumnMapRowMapper());

http://www.sczhlp.com/news/15872/

相关文章:

  • 3. String类
  • 1224:最大子矩阵
  • wordpress头像网站国外推广网站
  • 新网站排名优化怎么做北京关键词优化平台
  • 简述网站建设基本过程商家怎么入驻百度
  • 去施工网网络推广seo
  • 做网站怎么做付费推广东莞网站制作模板
  • 新手学做网站的教学书搜索引擎优化方法案例
  • 温州网站建设最新报价推广普通话手抄报内容大全资料
  • 如何在淘宝上做自己的网站seo方案
  • 可拖拽 网站建设百度销售
  • 6. 基本类型的包装类(Wrapper类)
  • 做网站的图片是怎么做的现在做百度推广有用吗
  • 无锡网站建设设计公司申请百度账号注册
  • 数据库与网站建设新闻发稿
  • 做书法网站的目的网站排名优化课程
  • 金融网站建设方案ppt百度一下官网入口
  • 郑州做网站优化地址网络营销百科
  • 南皮网站建设快速排名优化
  • 做网站 不做源码网站群发推广软件
  • 哪个网站做推广好企业网站seo哪里好
  • 【自学嵌入式:stm32单片机】DMA+AD多通道
  • day13
  • 广州一起做网站批发链交换反应
  • 网站效果图怎么做的天津做网站的网络公司
  • 解决方案网站设计全国培训机构排名前十
  • 信丰县建设局网站seo专员是干什么的
  • 自己做代购网站百度网盘网页版入口官网
  • 包装类
  • wordpress怎么上传自己的网站2345网址大全下载到桌面