如何在iOS中使用sqlite存储双引号
我使用sqlite数据库以离线模式存储值。在这些值中它包含带双引号的string(例如: hai“Man” )。
NSString* insertSQL = [NSString stringWithFormat: @"UPDATE tablename SET SummaryDescription=\"%@\" WHERE SummaryDate1=\"%@\" AND ClientId=\"%@\"",SummaryDescription,[_dic objectForKey:@"SummaryDate1"],[[NSUserDefaults standardUserDefaults]objectForKey:@"ClientID"]]; [db updateTable:insertSQL];
在SummaryDescription中包含值hai“Man” 。但是我无法将这些数据存储到数据库中。 如果我们删除这个双引号,我们可以存储这个数据。是否有其他方式来存储这些types的双引号string。
要存储双引号或任何其他特殊字符,请使用参数将string传递到SQL语句中( 如本答案中的CL所示 ):
NSString *str = @"some characters \" and \'"; const char *sql = "INSERT INTO MyTable(Name) VALUES(?)"; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) { sqlite3_bind_text(stmt, 1, [str UTF8String], -1, SQLITE_TRANSIENT); if (sqlite3_step(stmt) != SQLITE_DONE) { NSLog(@"SQL execution failed: %s", sqlite3_errmsg(db)); } } else { NSLog(@"SQL prepare failed: %s", sqlite3_errmsg(db)); } sqlite3_finalize(stmt);
希望这会帮助你。 快乐编码:)
您可以将SummaryDescription中的所有双引号出现replace为:
NSString *newSummaryDescription = [SummaryDescription stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
所以你的代码将如下所示:
NSString *newSummaryDescription = [SummaryDescription stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; NSString *insertSQL = [NSString stringWithFormat: @"UPDATE tablename SET SummaryDescription=\"%@\" WHERE SummaryDate1=\"%@\" AND ClientId=\"%@\"", newSummaryDescription, [_dic objectForKey:@"SummaryDate1"], [[NSUserDefaults standardUserDefaults] objectForKey:@"ClientID"]];
您需要转义(/)引号。
喜欢 :
hai "Man" :
>> 转到 >> : hai \""Man\""