使用spring的jdbc处理mysql时,出现别名问题处理_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 使用spring的jdbc处理mysql时,出现别名问题处理

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

 2011/8/24 8:11:11  koloum  http://koloum.iteye.com  我要评论(0)
  • 摘要:在spring中使用jdbc处理mysql时,sql语句存在别名的情况下,获取结果总是缺少字段,代码如下所示:Stringsql="selectcount(*)asnumfromyxtj_dqjla";System.out.println("result:"+jdbcTemplate.queryForList(sql));结果:result:[{=6}]这样的数据很明显不能进行操作,然后在网上找一些资料
  • 标签:使用 问题 Spring SQL 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}]

发表评论
用户名: 匿名