Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL中的转义字符(不带预处理语句)_Java_Sql_Spring - Fatal编程技术网

Java SQL中的转义字符(不带预处理语句)

Java SQL中的转义字符(不带预处理语句),java,sql,spring,Java,Sql,Spring,我知道有很多问题专门问这个,但我不确定我的情况。我使用Spring批处理和FieldSetMapper,所以我将这些语句生成为字符串,收集这些字符串并将它们传递给我的ItemWriter。从这个意义上说,我不想使用事先准备好的声明。以下是我得到的: private static String insertStmt = "insert into ..." //this is the beginning of the insert statement. Not gonna type it all

我知道有很多问题专门问这个,但我不确定我的情况。我使用Spring批处理和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;

}
但这不能处理像这样的案件
插入到。。。其中价值观(‘托尼的地方’,…)

因为tony的
有一个撇号

只需创建另一个私有方法,将字符串作为参数并迭代,如果检测到特殊字符,它将在字符之前放置一个反斜杠并返回新字符串(带有这些反斜杠)。然后,在创建sql语句的过程中,不要使用纯文本,而是使用文本作为参数调用此私有方法。

看看下面的答案:

在将insertStmt发送到insert之前,需要输入两个引号,如下所示:

  • this.primCustNum=this.primCustNum.replace(“,”)
这是行不通的,因为在SQL中,您可以使用两个撇号来转义撇号,例如。