why
事情的缘由是这样的,我们有两个平台,一个使用Oracle,另一个使用GreenPlum,查询结果封装成Map对象,如果使用相同的查询语句,Oracle的key是大写的,GreenPlum的key是小写的。
code
/** * 将小写 key 转换为大写 key * * @param mapList 小写 key 的map * @return 大写 keys 的map */ private List<Map<String, Object>> mapKeysToUpperCase(List<Map<String, Object>> mapList) { List<Map<String, Object>> returnList = new ArrayList<>(mapList.size()); mapList.forEach(oneMap -> { Map<String, Object> returnMap = new HashMap<>(oneMap.size()); // 转为小写 oneMap.forEach((key, val) -> returnMap.put(key.toLowerCase(), val)); oneMap.forEach((key, val) -> returnMap.put(key.toUpperCase(), val)); returnList.add(returnMap); }); return returnList; }
其他
如果使用的不是相同的查询语句,我们可以使用别名来保持字段名称的一致,GP数据也是支持字段别名,注意要使用双引号,否则别名将是全小写:
# 别名无效 查询结果封装成 map 则 key 为 tablename select table_name AS tableName from table_info select table_name AS TABLENAME from table_info # 别名有效 查询结果封装成 map 则 key 为 tableName select table_name AS "tableName" from table_info