在我的应用程序中,我需要从最后插入表中获取数据。我所做的就是这个
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;
}
问题是我没有得到最后插入的数据。我从其他行获取数据(我不确定它是来自顶行还是其他行)。
请你告诉我这里我做错了什么。
提前致谢。
答案 0 :(得分:1)
如果在插入行后立即执行此操作,则可以使用SQLite C函数sqlite3_last_insert_rowid()
获取最后插入行的rowid
。您还可以使用last_insert_rowid()
SQL函数:
SELECT * FROM PHONEBOOK WHERE ROWID = last_insert_rowid()
注意,您可能必须保持SQLite数据库处于打开状态(但无论如何,您不应该为每个SQL语句打开和关闭数据库)。
如果你以后再做这件事(例如用户终止应用程序,明天再回来,想要查看最后插入的记录),那么你必须依靠自己的数据库模型来处理那个。例如,我经常在表格中创建/修改/删除时间戳,每次INSERT
或UPDATE
行时我都会更新,然后您可以根据这些值进行排序。