如何在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\""