s.c*_*lin 3 sqlite iphone fmdb ipad ios
ya
我已经在我的应用程序中实现了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];
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是lastId始终为0,尽管数据库中当前有3个条目。任何人都不知道为什么会这样吗?
编辑:数据库是这样创建的:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
lastInsertRowId适用于特定的连接。您正在使用的连接刚刚打开,因此没有插入的行ID。
(目的lastInsertRowId是让您的应用知道刚刚INSERT编辑的记录的ID 。)
要从最后一条记录中读取数据,请使用以下命令:
SELECT budget FROM data WHERE rowid = (SELECT max(rowid) FROM data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3579 次 |
| 最近记录: |