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

我几乎整整一天都在想这个,经过几次尝试,我想我会看看这里有没有人可能有一些想法。 任何帮助是受欢迎的。

我有一个非常简单的ID和Name的表,我想获得表中的最后一个ID值。

虽然我没有得到任何编译错误或运行时错误,但我得到了错误的ID值。 根据SQLiteManager(它可以直接检查数据库),我的最大ID是10,但是,不pipe我做什么,我只是得到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的值不正确。

你也可以通过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; } 

这是第一次插入后? 或者你已经有一堆logging了? ROWID从0开始,所以第一个logging的ROWID = 0。