2010-02-16 92 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