3 votes

Stockage de la date et de l'heure dans une base de données SQL sur Android

Je tente de stocker 3 valeurs dans une base de données que j'ai créée sur un appareil Android. Les valeurs sont le NOM, la DATE et l'HEURE. Ma question est donc: quelle est la meilleure approche pour récupérer et stocker les valeurs actuelles de DATE et HEURE lorsqu'elles sont insérées dans la base de données?

Jusqu'à présent, j'ai identifié deux façons de le faire, soit en effectuant des appels système dans Android comme //values.put(TIME, System.currentTimeMillis()); ou en utilisant des fonctions SQL comme GETDATE(). Mais, laquelle est la meilleure?

Si je prends la mauvaise direction, veuillez me le faire savoir et me diriger dans la bonne direction.

2voto

Doug Currie Points 26016

Utiliser les fonctions SQL sera plus compatible avec d'autres outils utilisant le même moteur SQL.

Utiliser du texte au format ISO AAAA-MM-JJ hh:mm:ss.fff sera largement compatible et se classera correctement.

2voto

idbrise Points 4551

Les docs sqlite donnent ces options de type de colonne pour stocker des dates :

  • TEXT en tant que chaînes ISO8601 ("AAAA-MM-JJ HH:MM:SS.SSS").
  • REAL en tant que numéros de jour Julien, le nombre de jours depuis midi à Greenwich le 24 novembre 4714 av. J.-C. selon le calendrier grégorien proleptique.
  • INTEGER en tant que Temps Unix, le nombre de secondes depuis 1970-01-01 00:00:00 UTC.

Vous pourriez utiliser TEXT tel que décrit par Doug Currie, ou vous pourriez utiliser INTEGER en utilisant un java.util.Date. (Je ne sais pas pourquoi vous utiliseriez l'option REAL.)

Pour utiliser INTEGER, vous pourriez charger et stocker des dates de cette manière :

// construire une date à partir d'un Cursor
Date d = new Date(cursor.getLong(DATE_FIELD_INDEX));

// ajouter une date à une base de données SQLiteDatabase
final ContentValues values = new ContentValues();
values.put(DATE_FIELD, d.getTime());
db.insert(TABLE_NAME, null, values);

Cela sera moins lisible dans votre base de données, mais les comparaisons entre les dates (dans votre requête) devraient être plus rapides car comparer des nombres est plus rapide que des chaînes. (Bien que je ne sache pas grand-chose sur l'implémentation de sqlite.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X