如何解决为什么jdbcTemplate将列名转换为大写?
当我希望列名以这种方式返回时,为什么jdbcTemplate会将列名转换为大写?
translate(-50%,-50%)
查找记录,但返回大写名称(例如:BKID,RESTYPE ....)而不是(例如:bkId,restType)。您不需要更改请求中的任何内容。可能是什么问题?数据库oracle
select bkId,restType,printTemplateId,positionNo,isConfirmNeed,isActive from RestTypeBkView order by bkId
解决方法
SQL列名称根据定义不区分大小写。您不能依靠JDBC连接甚至数据库来保留列名的大小写。试试
desc {table_name};
在Oracle上,您将看到以大写形式报告的列名,无论创建表时使用了什么。
Oracle数据库驱动程序通常返回数据库已知的列名(即大写)。如果知道列名称应该是什么,则可以随时编写代码以显示更合适的值。
,首先JDBCTemplate 不会将列名转换为大写。
如果您定义了如下查询
String sql = 'SELECT bkId FROM tab';
Oracle数据库接收的字符串完全相同(未转换)。
您要解决的点是Oracle数据库中列名称的解释。
未加引号的列名被隐式认为是大写。
示例
create table tab
(bkId number);
select column_name from user_tab_columns where table_name = 'TAB';
COLUMN_NAME
------------------------------
BKID
但是如上所述,您可以小写或小写和大写
的任意组合引用以下所有查询都可以,并引用列名BKID
:
SELECT bkId FROM tab;
SELECT BKID FROM tab;
SELECT bkid FROM tab;
如果您确实想要区分大小写列名,请在创建时用双引号将该列名引起来:
create table tab
("bkId" number);
select column_name from user_tab_columns where table_name = 'TAB';
COLUMN_NAME
------------------------------
bkId
但是请三思而行,如果这确实是您想要的,因为此查询现在将失败
SELECT bkId FROM tab;
ORA-00904: "BKID": invalid identifier
您必须引用列名才能选择它:
SELECT "bkId" FROM tab;
,
Solution:
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
请参见org.springframework.core包CollectionFactort.java
/** Whether the Commons Collections 3.x library is present on the classpath */
private static final boolean commonsCollections3Available =
ClassUtils.isPresent("org.apache.commons.collections.map.CaseInsensitiveMap",CollectionFactory.class.getClassLoader());
/**
* Create a linked case-insensitive Map if possible: if Commons Collections
* 3.x is available,a CaseInsensitiveMap with ListOrderedMap decorator will
* be created. Else,a JDK {@link java.util.LinkedHashMap} will be used.
* @param initialCapacity the initial capacity of the Map
* @return the new Map instance
* @see org.apache.commons.collections.map.CaseInsensitiveMap
* @see org.apache.commons.collections.map.ListOrderedMap
*/
public static Map createLinkedCaseInsensitiveMapIfPossible(int initialCapacity) {
if (commonsCollections3Available) {
logger.trace("Creating [org.apache.commons.collections.map.ListOrderedMap/CaseInsensitiveMap]");
return CommonsCollectionFactory.createListOrderedCaseInsensitiveMap(initialCapacity);
}
else {
logger.debug("Falling back to [java.util.LinkedHashMap] for linked case-insensitive map");
return new LinkedHashMap(initialCapacity);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。