我有SQLite數據庫,我有一個名爲tblUser的表,其中我有變量說Id,名稱,圖像,性別。sqlite3表主鍵被取代
在我的應用程序中,我給功能添加,刪除更新用戶條目(通用功能)。假設我在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.
}
注意,當我回來的地方點擊保存,所有的細節需要填充頁面的按鈕後顯示在用戶的列表頁面,我調用此函數。任何提示都將非常有幫助。謝謝。
SQLite不會改變你的主鍵,所以在其他地方有一個bug。我建議向我們展示編輯記錄的SQL。 – Rob
另外,對於CL的觀點,你如何確定插入記錄的'UserId'?如果你依靠SQLite爲你做這件事,確保你使用'INTEGER PRIMARY KEY AUTOINCREMENT'而不僅僅是'INTEGER PRIMARY KEY'。您可能想向我們展示您的SQL以插入新記錄。你說它被插入爲3,當你編輯時,它變成了1,但我們都懷疑問題可能在插入而不是編輯。 – Rob