3
我在我的應用程序中實現了FMDB。我想從我的數據庫之一的最後一行ID與此
FMDatabase *bdb=[FMDatabase databaseWithPath:databasePath];
NSString *str;
if([bdb open]){
int lastId=[bdb lastInsertRowId];
FMResultSet *s = [bdb executeQuery:[NSString stringWithFormat:@"SELECT budget FROM data WHERE ROWID='%d'",lastId]];
if([s next])
{
str= [s stringForColumnIndex:0];
}
}
我的問題是,lastId始終爲0,雖然目前有3項在數據庫中。 Any1有任何想法爲什麼會發生這種情況?
編輯:數據庫是這樣創建的:一個特定連接
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: databasePath ] == NO)
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &basicDB) == SQLITE_OK)
{
char *errMsg;
const char *sql_stmt = "CREATE TABLE IF NOT EXISTS DATA (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, BUDGET INTEGER)";
if (sqlite3_exec(basicDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
{
DLog(@"Failed to create table");
}
sqlite3_close(basicDB);
} else {
DLog(@"Failed to open/create database");
}
}
啊哈!謝謝你的解釋。但假設我不會使用FMDB但是SQLITE API,select_last_row_id()會以類似的方式運行嗎? –
是的;這就是'lastInsertRowId'的實現方式。 –
那麼INSERT查詢如何知道在相應的rowid中插入一行?我的意思是肯定的,rowid被設置爲自動增量,但在這樣的假設檢查:數據庫包含3個項目,whith rowids 1,2和3.您插入第四項; sql把它放在rowid 4;那麼你刪除了新的一行;之後你做另一個INSERT;新行將有rowid 5,即使在最後一次INSERT時,max_rowid也是3. –