0

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.
}

すべての詳細を入力する必要があるページの保存ボタンをクリックした後、ユーザーのリストが表示されているページに戻ったときに、この関数を呼び出していることに注意してください。どんなヒントでも大いに役立ちます。ありがとうございました。

4

1 に答える 1

1

それが であると仮定するUserIdと、INTEGER PRIMARY KEYSQLite は以前の最大値よりも 1 大きい新しい ID を作成しますが、テーブルが空の場合は1 から (再) 開始します。

于 2012-10-18T12:06:39.593 に答える