2009-06-02 7 views
4

Y a-t-il un moyen, dans sqlite, d'enregistrer automatiquement un horodatage dans la table chaque fois qu'un enregistrement a été créé que je peux ensuite saisir et enregistrer en tant que NSDate dans mon application? Ou devrais-je plutôt créer l'objet NSdate avec l'heure actuelle dans mon application iphone, puis l'insérer dans la base de données. Si c'est le cas? Quelle colonne doit être le type de données pour l'instant? un DATETIME?Type de données datetime sqlite avec iphone NSdate?

Répondre

8

Il n'y a pas de type de données TIMESTAMP que vous pouvez utiliser dans SQLite, vous devrez donc insérer manuellement l'heure lorsque vous faites votre INSERT. J'utilise le INTEGER type de données dans la base de données, et convertir mon NSDate en tant que tel:

sqlite3_bind_double(insert_statement, 1, [myDate timeIntervalSince1970]); 

Et pour le récupérer de la DB:

myDate = [NSDate dateWithTimeIntervalSince1970:sqlite3_column_double(select_statement, 1)]; 
+0

J'ai peur, ce qui est faux, il y a Datetime dans SQLite type de données. – Thiru

21

Ce que je fais est current_timestamp de l'utilisation SQLite (qui ressemble quelque chose comme ça: 2009-06-16 12:11:24). Pour ce faire, simplement définir le type de ligne de votre table qslite à

Data type: "DATETIME" 
Allow null: NO 
Default value: CURRENT_TIMESTAMP 

Ensuite, utilisez une requête SQL comme ceci:

@"INSERT INTO 'scores' ('one', 'two', 'three') VALUES ('%d', '%d', '%d')" 

ignorant la date, afin qu'il obtiendra automatiquement la valeur de l'heure actuelle.

Puis convertir en un NSDate vous pouvez utiliser un NSDateFormatter comme ceci:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //this is the sqlite's format 
NSDate *date = [formatter dateFromString:score.datetime]; 

et maintenant vous avez cette date comme un objet NSDate. Il suffit de ne pas oublier de libérer le NSDateFormatter nous avons alloué :)

0

J'aime utiliser la fonction sqlite julianday(), comme:

insert into foo(currentDate) values (julianday('now')); 

Ce serait une valeur de l'insertion de virgule flottante en foo.currentDate.

Vous pouvez également trouver quelques détails de cette question/réponse utile.

How get a datetime column in SQLite with Objective C