spring JdbcTemplate 查询结果Map 大小写问题

总所周知 spring JdbcTemplate查询结果Map获取的都是忽略大小写的.
例如 jdbcTemplate.queryForMap("select * from tab where rownum=1").get("id");
如果tab中有id列 则应该是能获取到相应数据的.
但发现在不同机器上会出现不同结果.有些机器必须使用.get("ID");也就是使用大写才能获取到数据.而有些机器就可以
不知哪位以前遇到过类似问题.
[b]问题补充:[/b]
都是同一个数据库.oracle,更不是驱动问题.
问题已解决.

查看spring2.0文档后.发现创建Map的工厂中如果在1.4或common connection3.x会使用ListOrderedMap
否则使用LinkedListMap返回
所以不同机器就出现不同状况.
下载apache common collections 3.2 放入classpath即可统一.

ps:系统环境jdk1.4.2+jboss3.2.8sp1

自己做一个RowMapper吧。另外,使用Map装数据可不是一个好方法啊。

会不会是不同数据库造成的影响?

Mysql好像就存在这种问题。

  我没有用过Oracle,不过有的数据库是依赖于平台的,不知道你的问题会不会也出现在这个方面。
  例如在 MySQL 中,数据库和表对就于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。一个特例是 Mac OS X,当缺省的 HFS+ 文件系统使用时。然而 Mac OS X 还支持 UFS 卷,那些在 Mac OS X 是大小写敏感的就如他们在任一 Unix 上一样。查看章节 1.8.3 MySQL 对 ANSI SQL92 的扩展。
注意:尽管在 Windows 中数据库与表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。下面的查询将不能工作,因为它以 my_table 和 MY_TABLE 引用一个表:

  mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

  列名与列的别名在所有的情况下均是忽略大小写的。

  表的别名是区分大小写的。下面的查询将不能工作,因为它用 a 和 A 引用别名:

  mysql> SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2;

  如果记忆数据库和表名的字母大小写有困难,建议采用一个一致一约定,例如总是以小写字母创建数据库和表。

  避免这个问题的另一个办法就是以 -O lower_case_table_names=1 参数启动 mysqld。缺省地在 Windows 中这个选项为 1 ,在 Unix 中为 0。
如果 lower_case_table_names 为 1 ,MySQL 将在存储与查找时将所有的表名转换为小写字线。(从 MySQL 4.0.2 开始,这个选项同样适用于数据库名。) 注意,当你更改这个选项时,你必须在启动mysqld 前首先将老的表名转换为小写字母。

jdbcTemplate.queryForMap("select * from tab where rownum=1").get("id");
用此方式若查询返回的结果集为空的话将抛出异常,这样的结果似乎不是我们所期望得到的。。 所以一般都很少直接查询成单个Map。

----C----o----l----u----m----n----M----a----p----R----o----w----M----a----p----p----e----r----类中的mapRow方法中针对查询返回的数据进行Map----<S----t----r----i----n----g----,----O----b----j----e----c----t---->封装,mapRow方法中的----c----r----e----a----t----e----C----o----l----u----m----n----M----a----p----方法中,这里new了一个----L----i----n----k----e----d----C----a----s----e----I----n----s----e----n----s----i----t----i----v----e----M----a----p----<>();
这个问题你完全可以按照执行链路追踪一下,JdbcTemplate中的执行方法有几个,参数不同他们所返回集合类型可能会有所不同,这方面没有追踪过,希望有帮助到你。