使用spring的jdbc处理mysql时,出现别名问题处理

在spring中使用jdbc处理mysql时,sql语句存在别名的情况下,获取结果总是缺少字段,代码如下所示:

String sql = "select count(*) as num from yxtj_dqjl a";
System.out.println("result:"+jdbcTemplate.queryForList(sql));


结果:

result:[{=6}]


这样的数据很明显不能进行操作,然后在网上找一些资料,mysql获取过来的ResultSetMetaData的getColumnName在某些情况下会为空,而getColumnLabel数据则可以正常获取对应的别名值。
具体测试代码如下:

String sql = "select count(*) as testcount from test";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
System.out.println("columnName=" + rsmd.getColumnName(1));
System.out.println("columnLabel=" + rsmd.getColumnLabel(1));

结果:

getColumnName=
getColumnLabel=testid


问题找到了,本项目使用spring2.0,对于高版本的不知道是否对这个问题进行了修改,我在项目里就直接把spring的源代码改掉,其中文件:org\springframework\jdbc\core\ColumnMapRowMapper.java


public Object mapRow(ResultSet rs, int rowNum)
throws SQLException
{
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
Map mapOfColValues = createColumnMap(columnCount);
for (int i = 1; i <= columnCount; i++) {
[color=red]String key = getColumnKey(rsmd.getColumnName(i));[/color]
Object obj = getColumnValue(rs, i);
mapOfColValues.put(key, obj);
}
return mapOfColValues;
}

对于红色标注部分,改为

String key = getColumnKey(rsmd.getColumnLabel(i));


将文件重新生成并替换原jar包,现可以正常返回需要我数据了:

result:[{num=6}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值