2011-01-17 18 views
0

Ich habe eine Zeichenfolge, die in die Abfrage als IN-Klausel eingegeben wird, die wie folgt aussieht ('ACT','INACT') das ist einer der Parameter zu einer Funktion in einem Paket.Wenn ein Aufruf an die Funktion von Java ist, sieht es so ausEscaping Komma in Java

call package.function(1,2,3,('ACT','INACT'),4,5). 

Wenn das Paket genannt wird, erhalte ich Fehler wie falsche Art von Argumenten.

Es nimmt die Werte in Klammern als andere von Streichern getrennte Werte

+6

Bitte zeigen Sie uns den Code, der dieses Problem hat. '('ACT', 'INACT')' ist keine gültige Java-Syntax (außer vielleicht innerhalb einer String-Konstante), weil einfache Anführungszeichen Zeichenkonstanten anzeigen (d. H. Sie dürfen nur einen einzelnen Buchstaben enthalten). –

+0

Welche Parameter sind in 'package.function' definiert? – jzd

+0

Zeigen Sie uns bitte den Code. Anscheinend verwenden Sie CallableStatements nicht zum Ausführen des Anrufs. –

Antwort

0

Wenn Sie String s entkommen wollen, dass sie Anfragen in SQL stellen ich Sie bitten, einen Blick auf Commons Lang zu haben und insbesondere auf StringEscapeUtils die enthält eine statische Methode, um Strings für SQL zu umgehen.

1

Sie sollten eine CallableStatement verwenden, damit Sie sich keine Sorgen machen müssen, dass Ihre Eingaben nicht ausgeführt werden. Es würde so aussehen:

CallableStatement proc = conn.prepareCall("{call package.function(?,?,?,?,?,?) }"); 
proc.setInt(1,1); 
proc.setInt(2,2); 
proc.setInt(3,3); 
proc.setString(4,"('ACT','INACT')"); 
proc.setInt(5,4); 
proc.setInt(6,5); 
proc.execute();