我們的Java(JDK6)應用程序必須支持不同的數據庫,例如Oracle,SQL Server和DB2。我們使用Spring 3.0和JDBCTemplate進行數據庫訪問。我們的客戶之一使用SQL Server 2005,區分大小寫並自動設置大寫的表名。如何使用Spring的JdbcTemplate忽略數據庫表名區分大小寫?
顯然,諸如「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執行不區分大小寫的查詢?
同意,這可能是最好的解決方案。 – Tarek 2012-04-20 16:44:20