Objective c 所有后续insert语句始终在目标C的sqlite3中输入第一个insert语句

Objective c 所有后续insert语句始终在目标C的sqlite3中输入第一个insert语句,objective-c,insert,sqlite,Objective C,Insert,Sqlite,所有后续INSERT语句始终在目标C的sqlite3中输入第一个INSERT语句 例如,如果当表为空时,我输入'label=x'和'score=y',则所有其他后续INSERT语句都会为'label'和'score'插入相同的值 下面是我的insert方法的代码: - (void) insertDataInDatabase:(NSString*)label arg2:(double)score{ // setting up path to db file sqlite3_stmt *inser

所有后续INSERT语句始终在目标C的sqlite3中输入第一个INSERT语句

例如,如果当表为空时,我输入'label=x'和'score=y',则所有其他后续INSERT语句都会为'label'和'score'插入相同的值

下面是我的insert方法的代码:

- (void) insertDataInDatabase:(NSString*)label arg2:(double)score{

// setting up path to db file
sqlite3_stmt *insert_statement = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,       NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"MyDB.sqlite"];

// actually opening db and executing insert statement
if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {

    if (insert_statement == nil) {
    static char *sql = "";
    NSString *strSQL = [NSString stringWithFormat:@"INSERT INTO scores (label, score) VALUES('%@',%f)", label, score];
    sql = [strSQL UTF8String];
    sqlite3_prepare_v2(database, sql, -1, &insert_statement, NULL);           
    }

    if (sqlite3_step(insert_statement) == SQLITE_DONE)
    {
        NSLog(@"INSEEEERT!!!");
    }
    else
    {
        NSLog(@"failed");
    }

}
sqlite3_clear_bindings(insert_statement);
sqlite3_reset(insert_statement);
sqlite3_finalize(insert_statement);
sqlite3_close(database);
}

请帮忙

您从哪里获得标签和分数?以上是您的真实代码,还是您遗漏了一些行?代码有很多错误-不应该在每次访问时打开/关闭,在if测试中insert_语句将始终为零如果您向我们展示所有代码,您应该使用sqlite3_绑定。。。不要将值直接放入INSERT语句中。您应该检查sqlite3\u prepare\u v2中的返回代码,当您要调用sqlite3\u finalize时,调用sqlite3\u clear\u绑定或sqlite3\u reset没有任何意义。请注意,您必须处理来自SQLite的所有可能的错误代码。是的,这就是该特定方法的所有代码。我将尝试使用bind_text和bind_int函数