107 votes

Comment insérer un SQLite record avec un datetime réglé sur "maintenant" dans l'application Android?

Dire, nous avons un tableau créé:

créer une table des notes (_id integer primary key autoincrement, created_date date)

Pour insérer un enregistrement, je ne l'utiliserais

ContentValues initialValues = new ContentValues(); 
initialValues.put("date_created", "");
long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);

Mais comment définir la date_created colonne "maintenant"? Pour faire clair, le

initialValues.put("date_created", "datetime('now')");

N'est pas la bonne solution. Il a juste définit la colonne "datetime('now')" du texte.

191voto

e-satis Points 146299

Vous ne pouvez pas utiliser la fonction datetime en utilisant le Java wrapper "ContentValues". Soit vous pouvez utiliser :

  • SQLiteDatabase.execSQL de sorte que vous pouvez entrer une crue de la requête SQL.

    mDb.execSQL("INSERT INTO "+DATABASE_TABLE+" VALUES (null, datetime()) ");
    
  • Ou le java date de fonctionnalités :

    // set the format to sql date time
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Date date = new Date();
    ContentValues initialValues = new ContentValues(); 
    initialValues.put("date_created", dateFormat.format(date));
    long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);
    

43voto

Gautier Hayoun Points 1866

Dans mon code j'utilise DATETIME DEFAULT CURRENT_TIMESTAMP que le type et la contrainte de la colonne.

Dans votre cas, votre définition de la table serait

create table notes (
  _id integer primary key autoincrement, 
  created_date date default CURRENT_DATE
)

7voto

sooniln Points 9909

Il ya quelques options que vous pouvez utiliser:

  1. Vous pouvez essayer d'utiliser la chaîne "(DATETIME('now'))" à la place.
  2. Insérer la date / heure à vous-même, c'est à dire avec un Système.currentTimeMillis()
  3. Lors de la création de la table SQLite, spécifier une valeur par défaut pour le created_date colonne de la date actuelle heure.
  4. Utilisation SQLiteDatabase.execSQL pour insérer directement.

6voto

Jared Harley Points 4729

Pour moi, le problème dirait que vous êtes l'envoi d' "datetime('now')" comme une chaîne de caractères, plutôt qu'une valeur.

Ma pensée est de trouver un moyen de saisir la date/heure actuelle et l'envoyer à votre base de données comme une valeur de date/heure, ou trouver un moyen de l'utilisation de SQLite intégré dans l' (DATETIME('NOW')) paramètre

Découvrez la anwsers à ce SO.com question - ils sont susceptibles de vous conduire dans la bonne direction.

Nous espérons que cette aide!

4voto

Marco Gallella Points 183

Vous pouvez utiliser la fonction de java qui est:

ContentValues cv = new ContentValues();
cv.put(Constants.DATE, java.lang.System.currentTimeMillis());  

De cette façon, dans votre base de données vous enregistrez un numéro.
Ce nombre pourrait être interprété de cette façon:

    DateFormat dateF = DateFormat.getDateTimeInstance();
    String data = dateF.format(new Date(l));

À la place de l dans new Date(l), vous shoul insérer le numéro dans la colonne de date.
Donc, vous avez votre date.
Par exemple j'enregistre dans ma db ce numéro : 1332342462078
Mais lorsque j'appelle la méthode ci-dessus, j'ai ce résultat: 21-mar-2012 16.07.42

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