您的位置:首页 > 编程语言 > Java开发

关于mysql 数据库使用spring 2.0低版本 JdbcTemplate.queryForList 查询结果别名不起作用的解决方法

2014-09-17 09:37 1341 查看
1) 根据mysql jdbc驱动程序中com.mysql.jdbc.ResultSetMetaData 的源码
public String getColumnName(int column) throws SQLException {
if (this.useOldAliasBehavior) {
return getField(column).getName();
}
String name = getField(column).getNameNoAliases();

if (name != null && name.length() == 0) {
return getField(column).getName();
}

return name;
}
我们只需要在jdbc.url连接字符串的后面添加useOldAliasMetadataBehavior=true即可完美解决,如:jdbc:mysql://localhost:3306/goa30?characterEncoding=utf8&useOldAliasMetadataBehavior=true

2)  修改spring.2.X.jar 文件中,org\springframework\jdbc\core\ColumnMapRowMapper.java

package org.springframework.jdbc.core;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Map;
import org.springframework.core.CollectionFactory;
import org.springframework.jdbc.support.JdbcUtils;

public class ColumnMapRowMapper
implements RowMapper
{
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++) {
<span style="color:#ff0000;"> String key = getColumnKey(rsmd.getColumnName(i));</span>
Object obj = getColumnValue(rs, i);
mapOfColValues.put(key, obj);
}
return mapOfColValues;
}

protected Map createColumnMap(int columnCount)
{
return CollectionFactory.createLinkedCaseInsensitiveMapIfPossible(columnCount);
}

protected String getColumnKey(String columnName)
{
return columnName;
}

protected Object getColumnValue(ResultSet rs, int index)
throws SQLException
{
return JdbcUtils.getResultSetValue(rs, index);
}
}修改红色部分,String key = getColumnKey(rsmd.getColumnLabel(i));

替换源码中的class 文件,

总结:两种方法都可以解决遇到的问题,但是推荐使用第一种方式,修改spring源码可能会对其他数据库造成影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐