无法从sqlite表中获取最后插入的数据
在我的应用程序中,我需要从上一次插入到表中的数据中获取数据。我所做的就是这个无法从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;
}
的问题是我没有得到最后插入的数据。我从其他行获取数据(我不确定它是从顶行还是从其他行)。
你能告诉我在这里我做错了什么。
在此先感谢。
如果在插入行后立即执行此操作,则可以使用SQLite C函数sqlite3_last_insert_rowid()
获取最后一个插入行的rowid
。您也可以使用SQL last_insert_rowid()
功能:
SELECT * FROM PHONEBOOK WHERE ROWID = last_insert_rowid()
注意,你可能要保持SQLite数据库开放要做到这一点(但你不应该打开和关闭数据库的每个SQL语句,反正)。
如果您在稍后的某个日期(例如,用户终止应用程序,明天回来并希望看到最后插入的记录),那么您必须依靠自己的数据库模型来处理那。例如,我经常会在表格中创建/修改/删除时间戳,我每次更新该行的INSERT
或UPDATE
,然后可以根据这些值进行排序。
您是否关闭并重新打开了插入记录和尝试使用此功能之间的数据库?那会导致rowid的丢失。确保你打开数据库。 – Rob 2014-09-02 20:15:30
插入该行后,我不会立即执行此操作。插入行后可以获取行标识,然后使用此标识获取数据? – 2014-09-02 20:27:49
我现在正在获取行ID。我用这个。如果(sqlite3_step(insertStatement)== SQLITE_DONE){ NSLog(@“Contact sucessfully saved:new item id is%lld”,sqlite3_last_insert_rowid(db)); } – 2014-09-02 20:28:35
这些东西被称为“行”,而不是“列”。 'ORDER BY Name DESC'返回字母顺序最后一个名字的行。 – 2014-09-02 15:00:59
请注意,http://www.sqlite.org/docs.html有一些相当不错的文档(尽管它有点分散)。有几十个SQL教程在线。 – 2014-09-02 15:04:24