gpt4 book ai didi

objective-c - Sqlite3 表主键被替换

转载 作者:行者123 更新时间:2023-11-29 04:21:22 24 4
gpt4 key购买 nike

我有 SQLite 数据库,其中有一个名为 tblUser 的表,其中有变量,如 Id、姓名、图像、性别。

在我的应用程序中,我提供添加、删除更新用户条目的功能(常用功能)。假设我在有 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.
}

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

最佳答案

假设UserId是一个INTEGER PRIMARY KEY:SQLite 将创建比先前最大值大 1 的新 ID,但如果表为空,则会 (re)start at 1 .

关于objective-c - Sqlite3 表主键被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12953638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com