SQLite-如何在ios中插入数据

时间:2013-01-05 11:21:48

标签: iphone xcode sqlite

我尝试了一些sqlite程序进行练习,当我使用此代码插入记录时会出现一些错误

-(void) insertRecordIntoTableNamed:(NSString *) tableName
                            withField1:(NSString *) field1
                           field1Value:(NSString *) field1Value
                             andField2:(NSString *) field2
                           field2Value:(NSString *) field2Value {
        NSString *sql = [NSString stringWithFormat:
                         @"INSERT INTO ‘%@‘ (‘%@‘, ‘%@‘) VALUES (‘%@‘,’%@‘)",tableName, field1, field2, field1Value, field2Value];
        char *err;
        if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
            sqlite3_close(db);
            NSAssert(0, @"Error updating table.");
        }
    }

错误消息是

** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error updating table.'

我尝试通过终端插入数据并正确地恢复数据

所以请帮我通过程序插入数据

2 个答案:

答案 0 :(得分:2)

当您使用char *作为sql语句作为NSString对象时,它可能会更好。例如:

char * sql =“INSERT INTO'?'('?','?')VALUES('?'....”;

更换?使用NSString参数使用下面的函数。

sqlite3_bind_text(insert_statement,1,[tableName UTF8String], - 1,SQLITE_TRANSIENT); sqlite3_bind_text(insert_statement,2,[field1 UTF8String], - 1,SQLITE_TRANSIENT); 等....

首先,您必须定义insert_statement。 static sqlite3_stmt * insert_statement = nil; ...最后你应该用sqlite3_reset(insert_statement);

重置语句

答案 1 :(得分:1)

LEFT SINGLE QUOTATION MARK不适合在SQLite中引用标识符或值。使用“(\ x22)引用标识符,使用'(\ x27)。

引用数据

另外,我希望你的程序足够简单,以至于潜在的SQL注入无关紧要。