无法从sqlite表中获取最后插入的数据

时间:2014-09-02 14:59:30

标签: ios objective-c sqlite

在我的应用程序中,我需要从最后插入表中获取数据。我所做的就是这个

 NSString *query  = [NSString stringWithFormat:@"SELECT * FROM PHONEBOOK ORDER BY NAME DESC LIMIT 1;"];

    //  NSLog(@"query : %@",query);

    BOOL recordExist = [self recordExistOrNot:query];

    if (!recordExist) {

        // save data if no record exists
    }




    -(BOOL)recordExistOrNot:(NSString *)query{

BOOL recordExist=NO;

sqlite3_stmt    *statement;
const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath, &myDatabase) == SQLITE_OK) {




    if (sqlite3_prepare_v2(myDatabase, [query UTF8String], -1, &statement, nil)==SQLITE_OK)
    {
        if (sqlite3_step(statement)==SQLITE_ROW)
        {
            recordExist=YES;

            NSString *Name = [[NSString alloc]
                                 initWithUTF8String:
                                 (const char *) sqlite3_column_text(
                                                                    statement, 0)];
            NSString *PhoneNumber = [[NSString alloc]
                                     initWithUTF8String:
                                     (const char *) sqlite3_column_text(
                                                                        statement, 1)];

            //here i need to get the Name and number from the last inserted data
            NSLog(@"version is %@, type is %@",Name ,PhoneNumber);
        }
        else
        {
            NSLog(@"%s,",sqlite3_errmsg(myDatabase));
        }
        sqlite3_finalize(statement);
        sqlite3_close(myDatabase);
    }

}
return recordExist;

}

问题是我没有得到最后插入的数据。我从其他行获取数据(我不确定它是来自顶行还是其他行)。

请你告诉我这里我做错了什么。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果在插入行后立即执行此操作,则可以使用SQLite C函数sqlite3_last_insert_rowid()获取最后插入行的rowid。您还可以使用last_insert_rowid() SQL函数:

SELECT * FROM PHONEBOOK WHERE ROWID = last_insert_rowid()

注意,您可能必须保持SQLite数据库处于打开状态(但无论如何,您不应该为每个SQL语句打开和关闭数据库)。

如果你以后再做这件事(例如用户终止应用程序,明天再回来,想要查看最后插入的记录),那么你必须依靠自己的数据库模型来处理那个。例如,我经常在表格中创建/修改/删除时间戳,每次INSERTUPDATE行时我都会更新,然后您可以根据这些值进行排序。