2010-02-16 102 views
1

檢索數據庫中最後一個插入行的主鍵值時出現問題。無法從SQL數據庫中的最後一個插入行檢索值

我有一個名稱爲wineDetails的表格,其中包含2000多個葡萄酒名稱。我按字母順序顯示名稱。

當我在wineDetails表中添加新的葡萄酒名稱時,數據庫中新的葡萄酒名稱主鍵是2001,但是當我按字母順序更改顯示葡萄酒名稱時,我會獲得另一個葡萄酒名稱的主鍵值2001年

得到最後插入的行主要凱我寫的代碼爲:

- (void)addWineDetails:(wineDetails *)awineDet 
{ 
    sqlite3_stmt *insert_statement; 
    static char *sql = "INSERT INTO wineDetails (name,regionId,categoryId) VALUES (?,?,?)"; 
    if (sqlite3_prepare_v2(database, sql, -1, &insert_statement, NULL) != SQLITE_OK) 
    {  
     NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database)); 
    } 
    sqlite3_bind_text(insert_statement, 1, [[awineDet wine_Name]UTF8String] , -1, SQLITE_TRANSIENT); 
    sqlite3_bind_int(insert_statement, 2,[awineDet region_Id]); 
    sqlite3_bind_int(insert_statement, 3,[awineDet category_Id]); 
    int success = sqlite3_step(insert_statement); 
    sqlite3_finalize(insert_statement); 
    if (success == SQLITE_ERROR) 
    { 
     NSAssert1(0, @"Error: failed to insert into the database with message '%s'.", sqlite3_errmsg(database)); 
    } 
    else 
    { 
     primaryKey = sqlite3_last_insert_rowid(database); 
     int lastInsertId = sqlite3_last_insert_rowid(database); 
     wineDetPk = lastInsertId; 
     printf("\n last insert id in adding:%d",lastInsertId); 
     printf("\nwineDetPk id in adding:%d",wineDetPk); 
    } 
} 

夥計們,請幫助我走出了這一點。

任何人的幫助將不勝感激。

謝謝, Monish Kumar。

回答

0

最後一個自動ID
它是由auto_increment生成的嗎?
如果是你可以直接使用插入功能本身。

我還注意到你正試圖獲得PK和插入ID。據我所知,auto_increment 必須也是主鍵。所以它有點多餘。

如果您現在添加了錯誤,我將能夠提供更多建議。

+0

其實我沒有收到任何錯誤。但我沒有gettig結果我期望。我需要得到最後插入行的主鍵後,我改變葡萄酒名字爲字母順序。但我沒有得到最後插入PK值,我正在獲得另一個主鍵值,這是在更改爲字母順序後被替換的。 – monish 2010-02-16 11:13:07

+0

夥計們請幫我解決這個問題。 – monish 2010-02-16 11:23:28