2017-08-29 11 views
0

奇妙なバグのトラブルシューティングに役立つ必要があります。 LIKE句とワイルドカードとして "%"を使用する簡単な検索画面で、Oracle 12とEclipselink 2.5.2上で動作するアプリケーションがあります。Eclipselink LIKEクエリで予期しないエスケープが発生する

アプリケーションは、条件ビルダを使用してクエリを作成します。 QAテスト担当者は、検索画面に "_"アンダースコア文字のみを入力しました。アプリケーションコードは、ユーザー指定のテキストを '%'文字でラップします。予想外に(少なくとも私にとって)のEclipseLinkは、「_」文字をエスケープすることを決定しました

bind => [%\_%, ACTIVE, IT, 20, 0] 

意味を次のようにクエリパラメータがバインドされてプリペアドステートメントを実行する実行時

new StringBuilder("%").append(param).append("%").toString() 

、先頭に "\"を付けます。データベースはOracle 12です。結果のクエリに "ESCAPE '\'"という接尾辞が付くことを期待しますが、これは起こらず、エスケープ句がないと「\ _」がそのまま処理されるため、クエリは何も返しません元のユーザー検索文字列。

私には何が欠けていますか?

+0

かなり奇妙ですが、これはOracle 10 e EclipseLink 2.3.2では発生しません。 httpトラフィックが見えるように見ましたか? – GionJh

+0

実際に渡された内容を確認するために、Oracleの機能/ロギングを介して呼び出されたSQLを調べてください –

+0

コードをチェックし、StringBuilderから構築された結果の文字列と 'param'を出力しますが、特に、パラメータバインディングを使用している場合は、これを指示してください。構築している実際のクエリと式を表示します。 – Chris

答えて

0

Eclipselinkはエスケープ処理を実行しませんが、これはリモートクライアントコードの不具合です。ノイズは申し訳ありません。

関連する問題