我们的 Java (JDK6) 应用程序必须支持不同的数据库,例如 Oracle、SQL Server 和 DB2。我们使用 Spring 3.0 和 JDBCTemplate 进行数据库访问。我们的一位客户使用 SQL Server 2005 区分大小写并自动大写表名。
显然,诸如“select * from mytablename m”之类的查询不适用于所述客户端,因为他将拥有表 MYTABLENAME。
例如,对于以下代码,我得到了一个很好的异常:
this.jdbcTemplate.queryForOject("select * from mytablename m");
`Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select * from mytablename m]; nested exception is java.sql.SQLException: Invalid object name 'mytablename'.`
我不得不修改代码——因为我无法更改客户的数据库选项——所以最明显的解决方案是将我们查询中的所有表名都大写。我知道这对这个客户有用,但是如果一个新客户有一个区分大小写和小写表名的数据库怎么办?
到目前为止,我还没有成功地找到更广泛的解决方案。我发现的大多数答案都需要更改数据库的区分大小写或重写查询。我试过使用:this.jdbcTemplate.setResultsMapCaseInsensitive(true);
但如果我理解得很好,它只适用于我的查询结果,而不是查询本身。
有没有办法使用 Spring 的 JdbcTemplate 执行不区分大小写的查询?