2012-07-30 63 views
0

我開發了一個Java應用程序,用於讀取給定的xml文件並在xml文件中創建SQL INSERT or UPDATE statements數據。有趣的是有一些聲明如下。在Java中替換單引號

INSERT INTO BUYERS(BUYER_ID, BUYER_NAME) VALUES ('100', 'A's Shop') 
INSERT INTO BUYERS(BUYER_ID, BUYER_NAME) VALUES ('101', 'ABC's Shop') 
INSERT INTO BUYERS(BUYER_ID, BUYER_NAME) VALUES ('102', 'ZXCVBN's Shop') 
INSERT INTO BUYERS(BUYER_ID, BUYER_NAME) VALUES ('103', 'RR's Shop') 

UPDATE BUYERS SET BUYER_NAME = 'MKO's Shop' WHERE BUYER_ID = 151 
UPDATE BUYERS SET BUYER_NAME = 'DDD's Shop' WHERE BUYER_ID = 160 

當我試圖執行這些語句,我得到了一個錯誤ORA-00917: missing comma因爲在BUYER_NAME價值single quote

我試圖在java中使用replace(char oldChar, char newChar)方法替換single quote。但它會替換我的查詢中的所有single quotes

我只需要用BUYER_NAME替換single quote。我怎麼能這樣做?

+3

當您獲取從XML文件中的'BUYER_NAME'數據,構造語句之前逃脫報價 – 2012-07-30 09:14:28

+0

@JonLin得到它:) – Bishan 2012-07-30 09:16:32

+0

完全停止它,並使用PreparedStatement。這是一個浪費你時間的競爭。 – EJP 2012-07-30 22:22:39

回答

1

像Jon Lin評論的那樣,最好的方法是改變你的構造方法,以便在創建插入時從XML文本中轉義所有「危險」字符。

這樣你就可以精確地控制Insert語句中的結果。

請注意,如果XML不是由您自己構建的,那麼簡單地連接字符串以構建插入/更新語句可能會非常危險,因爲可能有SQL注入。

幾乎總是通過PreparedStatemens插入和更新數據是做這種事情的最好方式,但很難說出你的要求是什麼。

+0

不。最好的方法是使用PreparedStatement。 – EJP 2012-07-30 22:21:59

+0

您是否錯過了我說PreparedStatements的部分可能是這樣做的最好方法? – pcalcao 2012-07-31 09:15:16

2

嘗試使用preparedStatement()。

1

因爲你解析XML,使查詢字符串 只是確保你做的查詢語句

0

使用替換此單引號

String str = 'A's Shop' 

str=replace(str," ' "," '' ") // Here it will store as "A''s Shop" 

Or preparedStatement(). 
0

一個安全的嘗試之前,更換單引號(易)的方式是建立您的StringBuilder

StringBuilder sb = new StringBuilder(); 
sb.append("UPDATE BUYERS SET BUYER_NAME = '"; 
sb.append("MKO''s Shop") // or the (String) parameter build otherwhere 
sb.append("' WHERE BUYER_ID = "); 
sb.append(100); // Integer are transormed in String here 

,並使用sb.toString();

編輯:換成雙''內字符串

你可以做同樣的事情

INSERT INTO BUYERS(BUYER_ID, BUYER_NAME) VALUES (' 
100 
', ' 
name''s 
')