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源码可能会对其他数据库造成影响。