我的sqlite表有一个insert语句,其中包含值中的撇号。
NSString *sqlInsert = [NSString stringWithFormat:@"insert into myTable (_id, name, area, title, description, url) VALUES (%i, '%@', '%@', '%@', '%@', '%@')", tempObject.ID, tempObject.name, tempObject.area, tempObject.title, tempObject.description, tempObject.url];
该字符串的结果是这个
insert into myTable (_id, name, area, title, description, url) VALUES (0, 'John Smith', 'USA', 'Programmer', 'John Smith is a programmer. He programs a lot. John Smith's duty is to program. He loves it. His dog's name is Billy.', 'www.google.com')
当我尝试将其插入表格时,我在" s"附近出现语法错误。我想要正确地逃避撇号。我该怎么做呢?谢谢,任何见解都表示赞赏!
编辑:我们已经解决了我们的问题。我们在字符串中输入了一些单引号('),我们真的想要单引号。卷曲的单引号不会弄乱SQLite插入语句。 对于遇到此问题的人,您可以使用单个卷曲引号而不是常规单引号。这在您的情况下可能无法实现,但对于某些人来说,它可能是一个简单的解决方案。
答案 0 :(得分:3)
问题是您的数据中包含单引号。你有两个选择来解决这个问题。
'
\'
NSString *sqlInsert = @"insert into myTable (_id, name, area, title, description, url) VALUES (?, ?, ?, ?, ?, ?)";
if (sqlite3_open([yourDBPath UTF8String], &yourDB) == SQLITE_OK)
{
if (sqlite3_prepare_v2(yourDB, sql, 1, &stmt, NULL) == SQLITE_OK)
{
sqlite3_bind_int(stmt, 1, tempObject.ID);
sqlite3_bind_text(stmt, 2, [tempObject.name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 3, [tempObject.area UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 4, [tempObject.title UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 5, [tempObject.description UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 6, [tempObject.url UTF8String], -1, SQLITE_TRANSIENT);
// Execute
}
}