我知道有很多问题专门问这个,但我不确定。我正在使用Spring Batch和FieldSetMapper,因此我将这些语句生成为字符串,并收集这些字符串并将它们传递给我的ItemWriter。从这个意义上讲,我不打算使用准备好的声明。这就是我所拥有的:
private static String insertStmt = "insert into ..."
//this is the beginning of the insert statement. Not gonna type it all out
private String addStatement() {
String values = String
.format("values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' ESCAPE '\'')",
this.primCustNum, this.primCustName, this.mfstRptId,
this.shtlStpNum, this.primCustAddr1,
this.primCustAddr2, this.primCustCity,
this.primCustState, this.primCustPostalCde,
this.primCustPhoneNum);
//log.info("INSERT+VALUES: {}", insertStmt + values);
return insertStmt + values;
}
但这不会处理像这样的情况
insert into ... where values ('tony's place', ...);
因为tony's
有一个撇号
答案 0 :(得分:2)
看看这个答案: How to escape single quotes for SQL insert...when string to insert is in a user generated variable
在将insertStmt发送到insert之前,需要输入两个引号,如下所示:
答案 1 :(得分:-1)
只需创建另一个私有方法,将您的字符串作为参数并迭代它,如果检测到特殊字符,它将在char之前放置一个反斜杠并返回新字符串(使用这些反斜杠)。然后,在创建sql语句期间,而不是纯文本,使用您的文本作为参数调用此私有方法。