2016-08-01 3 views
0

Я знаю, что есть много вопросов, которые конкретно задают это, но я не уверен в моем случае. Я использую Spring Batch и FieldSetMapper, поэтому я генерирую эти выражения в виде строк и собираю эти строки и передавая их в свой ItemWriter. В этом смысле я не хочу использовать подготовленное заявление. Вот что я получил:Escape символов в SQL без подготовленного заявления

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 имеет apostraphe

ответ

-1

Просто создать еще один частный метод, который принимает строку в качестве аргумента и перебирать его и если обнаружить специальный символ, он поместит обратную косую черту перед символом и вернет новую строку (с этими обратными косыми чертами). Затем во время создания sql-инструкции вместо обычного текста вызывается этот частный метод с вашим текстом в качестве аргумента.

+0

Это не сработает, потому что в SQL вы избегаете апострофа, используя два апострофа, например https://support.microsoft.com/en-us/kb/156501. –

Смежные вопросы