Id、name、image、gender という変数を持っている tblUser という 1 つのテーブルがある SQLite データベースを使用しています。
私のアプリでは、ユーザーエントリを追加、削除、更新する機能を提供しています(共通機能)。2 人のユーザーがいるページにデフォルトで 2 つのレコードがあり、両方が削除されたとします。これで、挿入された 3 番目のレコードに主キー 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.
}
すべての詳細を入力する必要があるページの保存ボタンをクリックした後、ユーザーのリストが表示されているページに戻ったときに、この関数を呼び出していることに注意してください。どんなヒントでも大いに役立ちます。ありがとうございました。