2017-08-29 3 views
0

Ich brauche Hilfe bei der Fehlersuche einen seltsamen Fehler. Es gibt eine Anwendung, die auf Oracle 12 und Eclipselink 2.5.2 mit einem einfachen Suchbildschirm läuft, der eine LIKE-Klausel und "%" als Platzhalter verwendet.Unerwartete Flucht in Eclipselink LIKE Abfrage

Die Anwendung erstellt die Abfrage mithilfe des Kriterien-Generators. Ein QA-Tester hat nur den Unterstrich "_" auf dem Suchbildschirm eingegeben. Der Anwendungscode umschließt den benutzerdefinierten Text mit dem Zeichen "%".

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

Zur Laufzeit, wenn die Abfrage der vorbereitete Anweisung Parameter gebunden sind, wird wie folgt ausgeführt:

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

Bedeutung, die unerwartet (zumindest für mich) Eclipse beschlossen hat, das „_“ Zeichen zu entkommen mit einem führenden "\". Die Datenbank ist Oracle 12. Ich würde dann erwarten, dass die resultierende Abfrage mit "ESCAPE '\'" versehen wird, aber dies geschieht nicht und die Abfrage gibt nichts zurück, weil in Abwesenheit der Escape-Klausel "\ _" so verarbeitet wird, als wäre es die ursprüngliche Benutzersuchfolge

Was fehlt mir?

+0

Ziemlich seltsam, das passiert nicht mit Oracle 10 e eclipseLink 2.3.2. Haben Sie versucht, so zu sehen, wie der http-Verkehr aussieht? – GionJh

+0

Sehen Sie sich die aufgerufene SQL über Oracle facilities/logging an, um zu sehen, was tatsächlich übergeben wurde. –

+0

Überprüfen Sie Ihren Code und drucken Sie die Variable 'param' und die resultierende Zeichenfolge aus dem StringBuilder aus, aber EclipseLink wird nichts passieren , besonders wenn Sie die Parameterbindung verwenden, es sei denn, Sie haben es ihm gesagt. Zeigen Sie die tatsächliche Abfrage und den Ausdruck, den Sie erstellen. – Chris

Antwort

0

Eclipselink führt kein Escaping durch, dies war ein Fehler in einem Remote-Client-Code. Entschuldigung für den Lärm.