sqlite3 datetime在iPhone上无法正常运行

时间:2010-03-14 18:24:17

标签: sql objective-c iphone sqlite

我无法让sqlite3在日期时间之间进行比较。在我的Mac上,当我运行sql查询时,它可以工作。但是,在iPhone上,完全相同的查询失败。

我有一个sqlite3表设置如下:

CREATE TABLE IF NOT EXISTS `Artists` (
`id` int(11) NOT NULL PRIMARY KEY, 
`name` varchar(256) NOT NULL,
`lastUpdate` date NOT NULL default CURRENT_TIMESTAMP ,
...
...
);

我可以插入一位艺术家:

INSERT OR IGNORE INTO `Artists` (`id`,`name`) VALUES ('1','Justin');

我正在尝试查找过去2秒内未更新的艺术家数量(为了保持简短):

SELECT COUNT(*) FROM `Artists` WHERE `id` = ? AND `lastUpdate` < datetime('now','-2 seconds');

在iPhone上,这会返回0.在我的电脑上,它返回1.我期望值为1.有什么区别?我正在通过以下方式检索该值:

-(BOOL) artistNeedsUpdating:(int)artistId
{
    [dbLock lock];
    BOOL result = NO;
    sqlite3_stmt *statement;

    const char* query = "SELECT COUNT(*) FROM `Artists` WHERE `id` = ? AND `lastUpdate` < datetime('now','-2 seconds');";
    if(sqlite3_prepare_v2(database, query, -1, &statement, NULL) == SQLITE_OK){
        sqlite3_bind_int(statement, 1, artistId);

        if(sqlite3_step(statement) == SQLITE_ROW){
            if(sqlite3_column_int(statement, 0) > 0) // If 0, then we don't need to update
                result = YES;
        }

        sqlite3_finalize(statement);
    }
    [dbLock unlock];
    return result;
}

我很困惑为什么它在一个平台上工作而在另一个平台上工作,有没有人有任何想法?

谢谢你, 贾斯汀

1 个答案:

答案 0 :(得分:0)

没关系,这是我的错误。

在完成

之后我正在更新该行
UPDATE `Artists` SET `lastUpdate`='CURRENT_TIMESTAMP';

应该是:

UPDATE `Artists` SET `lastUpdate`=CURRENT_TIMESTAMP;