FMDB lastinsertRowID始终为0

时间:2012-10-19 14:43:58

标签: iphone ios ipad sqlite fmdb

Hya星

我在我的应用中实现了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");
        }
    }

1 个答案:

答案 0 :(得分:5)

lastInsertRowId适用于特定连接。 您正在使用的连接刚刚打开,因此没有插入的行ID。

lastInsertRowId的目的是让您的应用知道刚刚INSERT的记录的ID。)

要从最后一条记录中读取数据,请使用以下内容:

SELECT budget FROM data WHERE rowid = (SELECT max(rowid) FROM data)