Comment insérer un enregistrement SQLite avec une datetime définie à "maintenant" dans L'application Android?

Dire, nous avons un tableau créé comme:

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

Pour insérer un enregistrement, j'utiliserais

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

mais comment définir la colonne date_created à maintenant ? Pour être clair, le

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

n'Est pas la bonne solution. Il définit simplement la colonne en texte "datetime('now')".

102
demandé sur Mohit 2009-04-16 07:43:48

10 réponses

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

  • SQLiteDatabase.execSQL pour que vous puissiez entrer une requête SQL brute.

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

    // 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);
    
187
répondu e-satis 2010-08-13 13:20:39

dans mon code, j'utilise DATETIME DEFAULT CURRENT_TIMESTAMP comme type et contrainte de la colonne.

dans votre cas, votre définition de table serait

create table notes (
  _id integer primary key autoincrement, 
  created_date date default CURRENT_DATE
)
38
répondu Gautier Hayoun 2013-08-27 10:38:07

Méthode 1

CURRENT_TIME – Inserts only time
CURRENT_DATE – Inserts only date
CURRENT_TIMESTAMP – Inserts both time and date

CREATE TABLE users(
    id INTEGER PRIMARY KEY,
    username TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Méthode 2

db.execSQL("INSERT INTO users(username, created_at) 
            VALUES('ravitamada', 'datetime()'");

Méthode 3 Utilisation des fonctions de Date java

private String getDateTime() {
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return dateFormat.format(date);
}

ContentValues values = new ContentValues();
values.put('username', 'ravitamada');
values.put('created_at', getDateTime());
// insert the row
long id = db.insert('users', null, values);
25
répondu Rikin Patel 2014-11-09 09:42:23

il y a quelques options que vous pouvez utiliser:

  1. vous pouvez essayer d'utiliser la chaîne de caractères " (DATETIME('now')) " à la place.
  2. insérez la date vous-même, c'est-à-dire avec le système.currentTimeMillis ()
  3. lors de la création de la table SQLite, spécifiez une valeur par défaut pour la colonne created_date comme étant l'Heure de la date courante.
  4. Use SQLiteDatabase.execSQL à insérer directement.
7
répondu sooniln 2009-04-16 13:49:14

pour moi, le problème ressemble à vous envoyez "datetime('now')" comme une chaîne, plutôt qu'une valeur.

ma pensée est de trouver un moyen de saisir la date/heure actuelle et de l'Envoyer à votre base de données en tant que valeur date/heure, ou de trouver un moyen d'utiliser SQLite intégré (DATETIME('NOW')) paramètre

découvrez les anwsers à ce SO.com question - ils peuvent vous conduire dans la bonne direction.

espérons que ceci aide!

6
répondu Jared Harley 2017-05-23 12:02:17

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 db vous enregistrez un nombre.

Ce nombre pourrait être interprété de cette façon:

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

au lieu de l dans la nouvelle Date(l), vous devez insérer le numéro dans la colonne de date.

Donc, vous avez votre date.

Par exemple je sauve dans mon 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

4
répondu Marco Gallella 2012-03-21 15:10:55

basé sur la réponse @e-satis j'ai créé une méthode privée sur ma classe "DBTools" donc ajouter la date actuelle est maintenant vraiment facile:

...
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
...
        private String getNow(){
            // set the format to sql date time
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            return dateFormat.format(date);
        }
...

utilisez-le maintenant comme ceci: values.put("lastUpdate", getNow());

2
répondu Cedric Simon 2014-02-27 01:18:13

Fonctionne pour moi parfait:

    values.put(DBHelper.COLUMN_RECEIVEDATE, geo.getReceiveDate().getTime());

Save your date comme une longue.

1
répondu Stefan Beike 2012-10-06 10:46:35

cet exemple de code peut faire ce que vous voulez:

http://androidcookbook.com/Recipe.seam?recipeId=413

1
répondu Kristy Welsh 2013-03-11 22:38:33

assurez-vous que le champ n'est pas marqué "not null" en même temps que vous essayez d'insérer un horodatage par défaut en utilisant l'expression "(DATETIME ('now')) "

0
répondu AlokJoshiOfAarmax 2017-10-03 13:09:00