用Java替换单引号

时间:2012-07-30 09:12:25

标签: java escaping

我开发了一个用于读取给定xml文件的java应用程序,并使用xml文件中的数据生成SQL INSERT or UPDATE statements。我有一些陈述如下。

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错误,因为single quote的值为BUYER_NAME

我尝试在java中使用single quote方法替换此replace(char oldChar, char newChar)。但它会替换我的查询中的所有single quotes

我只需要用single quote替换BUYER_NAME。我怎么能这样做?

5 个答案:

答案 0 :(得分:2)

使用preparedStatement()尝试它。

答案 1 :(得分:1)

就像Jon Lin评论的那样,最好的方法可能是更改构造方法,以便在创建插入时从XML文本中转义所有“危险”字符。

通过这种方式,您可以精确控制插入语句中的内容。

请记住,如果XML不是由您构建的,那么简单地连接字符串以构建插入/更新语句可能会因为SQL注入的可能性而非常危险。

几乎总是,通过PreparedStatemens插入和更新数据是做这样的事情的最佳方式,但很难从问题中确定你的要求是什么。

答案 2 :(得分:1)

因为您正在解析xml并生成查询字符串 只需确保在进行查询语句之前替换单引号

答案 3 :(得分:0)

尝试使用替换此单引号

String str = 'A's Shop'

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

Or preparedStatement().

答案 4 :(得分: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();

编辑:替换为String

中的双''

您可以使用

执行相同的操作
INSERT INTO BUYERS(BUYER_ID, BUYER_NAME) VALUES ('
100
', '
name''s 
')