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());
// 转为小写 ((key, val) -> ((), 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