2010-03-14 3 views
0

J'ai des difficultés à obtenir sqlite3 pour faire des comparaisons entre datetimes. Sur mon mac, quand je lance les requêtes sql, ça marche. Cependant, sur l'iPhone, la même requête échoue.sqlite3 datetime ne fonctionne pas correctement sur l'iPhone

J'ai une configuration de table sqlite3 comme suit:

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 , 
... 
... 
); 

Je peux insérer un artiste avec:

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

Je suis en train de trouver le nombre d'artistes qui n'ont pas été mis à jour pour la 2 dernières secondes (pour le garder court):

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

Sur l'iPhone, retourne 0. Sur mon pc, il retourne 1. Je m'attends à ce que la valeur soit 1. Quelle est la différence? Je suis en train de récupérer la valeur par:

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

Je suis confus quant à pourquoi il fonctionne sur une plate-forme, mais pas l'autre, que quelqu'un a des idées?

Merci, Justin

Répondre

0

de Nevermind, ce fut mon erreur.

je mettais la ligne après se est fait avec

UPDATE `Artists` SET `lastUpdate`='CURRENT_TIMESTAMP'; 

Quand il aurait dû être:

UPDATE `Artists` SET `lastUpdate`=CURRENT_TIMESTAMP;