我开发了一个用于读取给定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
。我怎么能这样做?
答案 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
')