iPhone iOS:SQLite3无法获取表中的最后一个ID值

时间:2011-08-26 02:00:42

标签: iphone ios sqlite row

我几乎整天都试图解决这个问题,经过几次尝试,我想我会看到这里是否有人可能会有一些想法。欢迎任何帮助。

我有一个非常简单的ID和Name的表格,我希望得到表格中的最后一个ID值。

虽然我没有得到任何编译错误或运行时错误,但我得到了错误的ID值。根据SQLiteManager(可以直接检查数据库),我的最大ID是10,但是,无论我做什么,我只是为PlayKey获得0值。

以下是定义:

//CREATE THE Plays TABLE
char *errorMsg;
NSString *createSQL = @"CREATE TABLE IF NOT EXISTS Plays (ID integer PRIMARY KEY AUTOINCREMENT,PlayName text);";
if (sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK){
    sqlite3_close(database);
    NSAssert1(0, @"Error creating table: %s", errorMsg);
}

这是我尝试获取插入其中的最后一个ID的地方:

NSString *query3 = [NSString stringWithFormat:@"SELECT MAX(ID) FROM Plays"];
sqlite3_stmt *statement3;
if (sqlite3_prepare_v2(database, [query3 UTF8String], -1, &statement3, nil) == SQLITE_OK) {
    PlayKey = sqlite3_column_int(statement3, 0);
    NSString* msg4 = [NSString stringWithFormat:@"This worked! The PlayKey was %d", PlayKey];
    NSLog(msg4);
}
if (sqlite3_step(statement3) !=SQLITE_DONE) {NSLog(@"Error inserting to Steps");}

我还尝试使用更简单的内置函数来执行此操作:

PlayKey = sqlite3_last_insert_rowid(database);

这两次尝试都会导致错误的值为0。

2 个答案:

答案 0 :(得分:2)

您还可以通过sqlite_sequence检索任何表的最后一个ID。 EX -

+(int)getLastLocationId{
    NSString *sqlNsStr = [NSString stringWithFormat:@"SELECT * FROM sqlite_sequence where name='Location'"];
    const char *sql = [sqlNsStr cStringUsingEncoding:NSUTF8StringEncoding];
    int lastrec=0;
    //    if(sqlite3_open([dbPath UTF8String], &masterDB) == SQLITE_OK){
    if (sqlite3_prepare_v2(masterDB, sql, -1, &init_statement, NULL) == SQLITE_OK) {
        while(sqlite3_step(init_statement) == SQLITE_ROW) {
            lastrec = sqlite3_column_int(init_statement, 1);
        }
        sqlite3_reset(init_statement);
    }
    return lastrec;
}

答案 1 :(得分:0)

这是在第一次插入之后吗?或者你已经有很多记录? ROWID以0开头,因此第一条记录的ROWID = 0。