2016-07-19 22 views
0

Hallo das sieht wie einfach aus, aber ich habe Probleme hier.JDBC und Oracle DB: Escape '(einfaches Zitat)

Zuerst verwende ich Statement#executeBatch für die Ausführung von vielen UPDATE-Anweisungen. Jede Update-Anweisung hat einen zu aktualisierenden String-Wert. Diese Zeichenfolge enthält ein einfaches Anführungszeichen. Ich habe versucht, ein weiteres einzelnes Zitat vor ihm gemäß Oracle doc hinzuzufügen und '\\\' vor einem einfachen Zitat hinzuzufügen. Mit der ersten bleibt meine Anfrage stecken und kommt auch nach 10 Minuten nicht mehr raus. Mit dem zweiten bekomme ich 'Batching: ORA-00927: fehlendes Gleichheitszeichen' Fehler.

Was ist der richtige Ansatz? Hinweis: - Ich kann PreparedStatement nicht verwenden, um JDBC-Parameter zu verwenden.

Bitte helfen.

+1

Bitte erweitern warum Sie können PreparedStatements nicht verwenden. Wenn Sie versuchen, sql manuell zu erstellen und zu entfernen, sind Sie anfällig für Anwendungsfehler und SQL-Injection-Angriffe. –

+0

Ich wusste nicht, ich könnte Batch-Update sogar mit PreparedStatement verwenden. Ging durch Javadoc und verstand, dass es getan werden kann. Danke für deine Kommentare.! – user1576882

Antwort

2

können Sie die Verwendung q-quoted strin g zB q'['''''''']'

Diese geben ein folgendes Beispiel

Statement stmt = con.createStatement(); 

stmt.addBatch("update tst set txt = q'['''''''']' where id = 1"); 
stmt.addBatch("update tst set txt = q'['''''''']' where id = 2"); 
stmt.addBatch("update tst set txt = q'['''''''']' where id = 3"); 
stmt.addBatch("update tst set txt = q'['''''''']' where id = 4"); 
stmt.addBatch("update tst set txt = q'['''''''']' where id = 5"); 
// submit a batch of update commands for execution 
int[] updateCounts = stmt.executeBatch(); 

Aber die richtige Weise ist die vorbereitete Anweisung verwenden

PreparedStatement stmt = con.prepareStatement("update tst set txt = ? where id = ?"); 
5.times { i -> 
    stmt.setString(1, "''''''''"); 
    stmt.setInt(2, i+1); 
    stmt.addBatch(); 
} 

// submit a batch of update commands for execution 
int[] updateCounts = stmt.executeBatch(); 
+0

Ich wusste nicht, dass ich das Batch-Update auch mit PreparedStatement verwenden könnte. Ging durch Javadoc und verstand, dass es getan werden kann. Danke für deine Kommentare.! – user1576882