2012-04-20 22 views
2

Java(JDK6)アプリケーションは、Oracle、SQL Server、DB2などの異なるデータベースをサポートする必要があります。データベースアクセスにはSpring 3.0とJDBCTemplateを使用します。私たちのクライアントの1人は大文字と小文字を区別し、大文字と小文字のテーブル名を自動的に使用するSQL Server 2005を使用しますSpringのJdbcTemplateを使用して、データベースtablename大文字と小文字の区別を無視する方法?

"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を使用して大文字小文字を区別しないクエリを実行する方法はありますか?

答えて

2

もここを見てみましょう。これは、インターフェイスでのデータアクセスを抽象化し、サポートされている各データベースベンダーの実装を記述することの重要性を強調する絶好の機会です。

アプリでは、インターフェイスにコードを作成する必要があります。 Springを使用しているときに、依存関係注入を使用してデータアクセス層で適切なDB実装を使用することができます。アプリケーションコンテキスト設定ファイルへの変更はほんのわずかです。

+0

合意しました。これはおそらく最良の解決策です。 – Tarek

0

あなたの問題は、userがMS-SQLサーバー上のreserverd keywordであると思います。あなたはあなただけの機密名の場合よりも問題を見つけるかもしれない多数のデータベースをサポートしている場合Is SQL syntax case sensitive?

+0

実際、ユーザーは単なる例です。私は私の質問を変更します。 – Tarek

+0

これは実際の問題が経験されているかどうかわかりませんが、確かに疑わしく、避けたいことがあります。実際、私は 'user'が_all_ RDBMSの予約語であることはかなり確信しています。 OPが私たちに別の例を与えることができれば、これは容易に検証できるはずです。 –

関連する問題