2012-07-25 3 views
0

XML을 다운로드하고 해당 값을 SQLite3 데이터베이스에 삽입하는 응용 프로그램을 만듭니다. ' 있었다 때마다 그것은 오류를주고 있었다, 그래서 나는 문자열을 탈출하기 위해이 기능을 만들어 :문자열을 이스케이프 할 때 SQLite3 오류가 발생했습니다.

+(NSString *)escapeString:(NSString *)string { 
    NSRange range = NSMakeRange(0, [string length]); 
    NSMutableString *str = 
    [NSMutableString stringWithString:string]; 
    [str replaceOccurrencesOfString:@"'" withString:@"\\\'" options:0 range:range]; 
    return str; 
} 

문제는 데이터베이스가 이제 오류 unrecognized token: "\"을 gimming 점이다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? BTW, 나는 여전히 Tiger를 사용하고있다. SQLite의 구버전과 관련이있을 수 있는가? 그렇다면 어떻게 해결할 수 있습니까? 내가 만들고있는 앱은 Tiger와 Panther에서도 작동해야합니다.

답변

1

SQL은 슬래시 문자로 이스케이프하지 않습니다. 작은 따옴표 '을 사용하여 문자열 내에서 이스케이프 처리합니다.

[str replaceOccurrencesOfString:@"'" withString:@"\\\'" options:0 range:range]; 

실제로해야한다 :

[str replaceOccurrencesOfString:@"'" withString:@"''" options:0 range:range]; 

당신에게

Reference

INSERT INTO xyz VALUES('5 O''clock'); 
그래서 나는이 줄을 (당신이 사용하는 어떤 언어 나도 몰라) 가정 콘텐츠를 직접 스크럽하여 우수 사례에 위배됩니다. sqlite의 바인딩 기능을 사용하는 것이 좋습니다. 대신 문자열 조작을 직접 수행하는

:

sql = "INSERT INTO xyz VALUES('"+ my_value +"');" 

이 같은 것을 사용하십시오 :

sql = "INSERT INTO xyz VALUES(?1);" 

그런 다음 바인드를 사용 ?1의 내용을 할당 호출합니다.

관련 문제