2011-11-01 40 views
2

你好朋友,如何获取最新更新值在sqlite3

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

对于这个,我可以做什么的任何建议。

由于提前, Hardik帕特尔

+0

有趣的问题hardik ... – Android

回答

2

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

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

因此,在同步的时候,你会只有那些记录发送到服务器,其 record_timestamp> LAST_UPDATED_TIMESTAMP

LAST_UPDATED_TIMESTAMP将执行成功同步每次更新。

我希望这会有所帮助。

此链接将帮助您在sqlite的Timestamp comparison

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; 
}