如何在sqlite3中获取最后更新的值

时间:2011-11-01 13:52:11

标签: iphone sqlite

Hello Friends,

我有一个应用程序,它将与数据库同步到Web服务。我有一个表列表,我想更新,删除和插入列表。当用户单击同步按钮时,我想发送将在数据库中更新或更改的数据。添加,更新或删除的Web服务不同我想只发送更新的记录。

为此,我可以为此提出任何建议。

提前致谢, Hardik Patel

2 个答案:

答案 0 :(得分:2)

您可以为时间戳维护一个额外的列。 因此,每当更改记录时,您应该更新时间戳。 (的 record_timestamp

您必须保持将数据成功发送到服务器的时间。 (的 LAST_UPDATED_TIMESTAMP

因此,在同步时,您只会将这些记录发送给服务器 record_timestamp> LAST_UPDATED_TIMESTAMP

每次成功同步时, last_updated_timestamp 都会更新。

我希望这会有所帮助。

此链接将帮助您比较sqlite Timestamp comparison

中的时间戳

答案 1 :(得分:0)

您使用sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);

- (NSNumber *)executeSQL:(NSString *)sql withCallback:(void *)callbackFunction context:(id)contextObject {
    NSString *path = [self pathToDB];
    sqlite3 *db = NULL;
    int rc = SQLITE_OK;
    NSInteger lastRowId = 0;
    rc = sqlite3_open([path UTF8String], &db);
    if(SQLITE_OK != rc) {
        NSLog(@"Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return nil;
    }else {
        char *zErrMsg = NULL;
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        rc = sqlite3_exec(db, [sql UTF8String], callbackFunction, (void*)contextObject, &zErrMsg);
        if(SQLITE_OK != rc) {
            NSLog(@"Can't run query '%@' error message: %s\n", sql, sqlite3_errmsg(db));
            sqlite3_free(zErrMsg);
        }
        lastRowId = sqlite3_last_insert_rowid(db);
        sqlite3_close(db);
        [pool release];
    }
    NSNumber *lastInsertRowId = nil;
    if(0 != lastRowId) {
        lastInsertRowId = [NSNumber numberWithInteger:lastRowId];
    }
    return lastInsertRowId;
}