0

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

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 quotein 值BUYER_NAME

我试图single quotereplace(char oldChar, char newChar)java中的方法替换这个。但它替换single quotes了我的查询中的所有内容。

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

4

5 回答 5

2

尝试使用preparedStatement()。

于 2012-07-30T09:17:08.437 回答
1

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

这样您就可以准确控制 Insert 语句中的结果。

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

几乎总是,通过 PreparedStatemens 插入和更新数据是执行此类操作的最佳方式,但很难从问题中说出您的要求。

于 2012-07-30T09:16:48.280 回答
1

因为您正在解析 xml 并制作查询字符串,所以请确保在制作查询语句之前替换单引号

于 2012-07-30T09:17:36.157 回答
0

尝试使用它来替换这个单引号

String str = 'A's Shop'

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

Or preparedStatement().
于 2012-07-30T09:28:23.110 回答
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 
')
于 2012-07-30T09:38:50.093 回答