我需要根据我作为变量的时间戳检查SQLite数据库表中的时间戳。当我对我的表运行select语句时,我似乎缺少第一条记录。
lastMod = dict[@"LastMod"];
[self openDB];
NSString *sqlQuery = [NSString stringWithFormat:@"SELECT LastMod FROM %@ order by Lastmod desc", newTableName];
const char *sqlQueryChars = [sqlQuery cStringUsingEncoding:[NSString defaultCStringEncoding]];
sqlite3_stmt *statementChk;
sqlite3_prepare_v2(congressDB, sqlQueryChars, -1, &statementChk, NULL);
if (sqlite3_step(statementChk) == SQLITE_ERROR){
NSAssert1(0, @"Error: %s", sqlite3_errmsg(congressDB));
sqlite3_close(congressDB);
} else {
if (sqlite3_step(statementChk) == SQLITE_ROW) {
NSString *resultString = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statementChk, 0)];
NSNumberFormatter *resultNumberFormatter = [[NSNumberFormatter alloc] init];
[resultNumberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *resultNumber = [resultNumberFormatter numberFromString:resultString];
if (resultNumber){
if ([lastMod integerValue] > [resultNumber integerValue]) {
needsUpdating = @"YES";
} else {
needsUpdating = @"NO";
}
}
} else {
needsUpdating = @"YES"; // No rows found, table is empty and needs filling
}
数据库中的最新记录是:
1390393860
1390385996
1390385681
...
我想要和期待的那个是最高的 - 1390393860,最大的数字(这是最新纪录)。但我得到第二个1390385996.如果我将查询更改为:
NSString *sqlQuery = [NSString stringWithFormat:@"SELECT LastMod FROM %@ order by Lastmod desc limit 1", newTableName];
程序说没有返回任何行。直接在数据库上测试此查询将返回正确的行。发生了什么事?
感谢。
答案 0 :(得分:0)
你需要两次致电sqlite_step()
:
if (sqlite3_step(statementChk) == SQLITE_ERROR){
NSAssert1(0, @"Error: %s", sqlite3_errmsg(congressDB));
sqlite3_close(congressDB);
} else {
if (sqlite3_step(statementChk) == SQLITE_ROW) {
当您应该仅使用最后一个电话时:
if (sqlite3_step(statementChk) == SQLITE_ROW) {
(您想要获取下一行并仅在出现错误时做出反应)。