Я пытался выяснить это почти весь день, и после нескольких попыток я решил, что у кого-нибудь есть идеи.Любая помощь приветствуется.
У меня есть довольно простая таблица идентификаторов и имен, и я хотел бы получить последнее значение идентификатора в таблице.
Хотя я не получаю никаких ошибок компиляцииили ошибки во время выполнения, я получаю неправильное значение для ID.Согласно SQLiteManager (который может напрямую проверять базу данных) мой максимальный идентификатор равен 10, однако независимо от того, что я делаю, я просто получаю значение 0 для PlayKey.
Вот определения:
//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.