0

我有一个 SQLite 数据库,其中有一个名为 tblUser 的表,其中有变量为 Id、name、image、gender。

在我的应用程序中,我提供了添加、删除更新用户条目的功能(通用功能)。假设我在有 2 个用户的页面上默认有 2 条记录,并且两者都被删除。现在插入的第三条记录将提供主键为 3。

现在,如果我编辑该特定记录,则不会使用新数据更新它,而是在调用以下函数时将其主键替换为 1:

+ (void) getInitialDataToDisplay:(NSString *)dbPath
{
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    //sqlite3_open([dbPath UTF8String], &database);
    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
    {
        const char *sql = "select UserId,UserAge,UserName,UserGender,UserImage from [tblUser]";
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)
        {
            while(sqlite3_step(selectstmt) == SQLITE_ROW)
            {
                NSInteger primaryKey = sqlite3_column_int(selectstmt,0);
                UserDetail *DataObj = [[UserDetail alloc] initWithPrimaryKey:primaryKey];

                DataObj.UserAge = sqlite3_column_int(selectstmt,1);
                DataObj.UserName =    [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
                DataObj.UserGender =   [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)];
                DataObj.UserImage =   [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 4)];
                DataObj.isDirty = NO;
                [appDelegate.DataArray addObject:DataObj];
            }
        }
        else
        {
            NSAssert1(0,@"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
        }
    }
    else
        sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory.
}

请注意,当我在单击需要填写所有详细信息的页面的保存按钮后返回显示用户列表的页面时,我正在调用此函数。任何提示都会很有帮助。谢谢你。

4

1 回答 1

1

假设这UserId是一个INTEGER PRIMARY KEY: SQLite 将创建比先前最大值大一的新 ID,但如果表为空,它将(重新)从 1 开始

于 2012-10-18T12:06:39.593 回答