web-dev-qa-db-fra.com

Comment ajouter une date dans la base de données sqlite

J'ai sqlite database

    private static final String DB_PROCESS_CREATE = "create table "
        + DB_TABLE_PROCESS + "(" + PROCESS_ID
        + " integer primary key autoincrement, "
        + PROCESS_DATE + " date);";

Je le crée db.execSQL(DB_PROCESS_CREATE);

Comment ajouter une valeur de date dans cette base de données? J'ai essayé :

String date = new SimpleDateFormat("yyyy.MM.dd").format(Calendar
.getInstance().getTime());
ContentValues cv = new ContentValues();
cv.put(db.PROCESS_DATE,Date.valueOf(date));
db.mDB.insert(db.DB_TABLE_PROCESS, null, cv));

Mais je reçois error:

"The method put(String, String) in the type ContentValues is not applicable for the arguments (String, Date)".
22
Kostya Khuta

Maintenant, lorsque vous souhaitez insérer la date dans la base de données, vous pouvez utiliser ce code.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(new Date());

Dans la base de données, insérez la chaîne 'date'

Le format de date dans sqlite doit être au format suivant:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD 

Pour plus de détails, jetez un œil: http://www.sqlite.org/lang_datefunc.html

46
Homam

Vous ne pouvez pas stocker la date directement dans SQLite. Par exemple, vous pouvez le stocker en tant que valeur entière:

ContentValues cv = new ContentValues();
cv.put(db.PROCESS_DATE, new Date().getTime());
db.mDB.insert(db.DB_TABLE_PROCESS, null, cv));

Dans ce cas, votre champ de date doit être déclaré comme un entier:

private static final String DB_PROCESS_CREATE = "create table "
        + DB_TABLE_PROCESS + "(" + PROCESS_ID
        + " integer primary key autoincrement, "
        + PROCESS_DATE + " integer);";

À partir des documents SQLite: SQLite n'a pas de classe de stockage réservée pour le stockage des dates et/ou des heures. Au lieu de cela, les fonctions de date et d'heure intégrées de SQLite sont capables de stocker des dates et des heures sous forme de valeurs TEXT, REAL ou INTEGER:

  1. [~ # ~] texte [~ # ~] sous forme de chaînes ISO8601 ("AAAA-MM-JJ HH: MM: SS.SSS").
  2. [~ # ~] réel [~ # ~] en nombre de jours juliens, le nombre de jours depuis midi à Greenwich le 24 novembre 4714 av. selon le calendrier grégorien proleptique.
  3. [~ # ~] entier [~ # ~] en temps Unix, le nombre de secondes depuis le 1970-01-01 00:00:00 UTC. Les applications peuvent choisir de stocker les dates et les heures dans l'un de ces formats et de convertir librement entre les formats à l'aide des fonctions de date et d'heure intégrées.

Voir http://www.sqlite.org/datatype3.html

10
Ilya Lysenko

La meilleure façon de mettre une date dans une base de données serait d'utiliser sa valeur longue. J'ai essayé de faire ce que vous faisiez et il y avait une erreur similaire. Au lieu d'une chaîne, entrez une valeur numérique. Cela peut prendre la valeur longue, qui, je crois, est la valeur en millisecondes. Il peut ensuite être reconverti lorsque vous le retirez.

2
Martin Estes