Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone iOS:SQLite3无法获取表中的最后一个ID值_Iphone_Ios_Sqlite_Row - Fatal编程技术网

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

iPhone iOS:SQLite3无法获取表中的最后一个ID值,iphone,ios,sqlite,row,Iphone,Ios,Sqlite,Row,我几乎一整天都在想这个问题,经过几次尝试,我想我会看看这里是否有人有一些想法。欢迎任何帮助 我有一个非常简单的ID和Name表,我想得到表中最后一个ID值 虽然我没有得到任何编译错误或运行时错误,但我得到的ID值是错误的。根据SQLItemManager(它可以直接检查数据库),我的最大ID是10,但是,无论我做什么,我只得到PlayKey的值0 以下是定义: //CREATE THE Plays TABLE char *errorMsg; NSString *createSQL = @"CRE

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

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

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

这是在第一次插入之后发生的吗?或者你已经有很多唱片了?ROWID以0开头,因此第一条记录的ROWID=0。

您还可以通过sqlite\u序列检索任何表的最后一个ID。 前-


不,我已经有很多唱片了。根据一个单独的应用程序(SQLite管理器),正确的ROWID应该是10。即使我立即输入多个记录,我仍然只得到0。我只是注意到您自己创建了ID字段。为什么?每行将自动创建字段ROWID。您可以通过直接指定它来访问:
选择ROWID,*fromtable
。这个ROWID应该由
sqlite3\u last\u insert\u ROWID
Ahh返回,我明白了。谢谢可能不是最有效的方法,但它得到了正确的ID!
+(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;
}