0

いくつかの奇妙な問題:

-(void)registerNewItemStatus:(int)itemID typeID:(int)typeID dated:(NSString*)date
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:user_data];
sqlite3* database = NULL;
sqlite3_stmt *statement;
if (sqlite3_open([path UTF8String], &database) == SQLITE_OK)
{
    NSLog(@"DBAcc itemID: %d",itemID); // shows 9, so not null
    const char *sqlItems=sqlite3_mprintf("INSERT INTO itemStatus(refID,kmID,enabled,grade,dated,memo)\
                                         VALUES(?,?,1,0,?,NULL)",itemID,typeID,date);
    if(sqlite3_prepare_v2(database, sqlItems, -1, &statement, NULL) != SQLITE_OK)

        sqlite3_bind_int(statement, 1, itemID);
        sqlite3_bind_int(statement, 2, typeID);
        sqlite3_bind_text(statement, 3, [date UTF8String], -1, SQLITE_TRANSIENT);
    char* errmsg;
    sqlite3_exec(database, "sqlItems", NULL, NULL, &errmsg);
    sqlite3_free((char*)errmsg);
    if(SQLITE_DONE != sqlite3_step(statement))
        sqlite3_finalize(statement);
    sqlite3_free((char*)sqlItems);
    sqlite3_close(database);

}
else
{
    NSLog(@"%s: prepare failed: %s", __FUNCTION__, sqlite3_errmsg(database));
}
}

私の問題は、itemID が db に挿入されないことです。null を示します。悪はどこに?大変お世話になりました。

4

1 に答える 1

0

コードが適切にインデントされていれば、次のように表示されます。

if(sqlite3_prepare_v2(database, sqlItems, -1, &statement, NULL) != SQLITE_OK)
    sqlite3_bind_int(statement, 1, itemID);
sqlite3_bind_int(statement, 2, typeID);
sqlite3_bind_text(statement, 3, [date UTF8String], -1, SQLITE_TRANSIENT);

適切なエラー処理を追加する必要があります。

失敗した場合でも、常に呼び出すsqlite3_finalize必要があることに注意してください。sqlite3_step

于 2013-08-05T20:38:00.387 に答える