web-dev-qa-db-fra.com

Comment insérer un enregistrement SQLite avec une date / heure définie sur 'maintenant' dans l'application Android??)?

Dites, nous avons une table créée comme:

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

Pour insérer un disque, 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 sur maintenant? Pour que ce soit clair, le

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

N'est-ce pas la bonne solution. Il suffit de définir la colonne sur "datetime ('now')" text.

105
droidguy

Vous ne pouvez pas utiliser la fonction datetime avec le wrapper "ContentValues" Java). Vous pouvez également utiliser:

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

    mDb.execSQL("INSERT INTO "+DATABASE_TABLE+" VALUES (null, datetime()) ");
    
  • Ou les capacités Java date/heure:

    // 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);
    
188
e-satis

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
)
40
Gautier Hayoun

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 Utilisation de Java Fonctions de date

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);
28
Rikin Patel

Il y a plusieurs options que vous pouvez utiliser:

  1. Vous pouvez essayer d'utiliser la chaîne "(DATETIME (" maintenant "))" à la place.
  2. Insérez la date et l'heure vous-même, c'est-à-dire avec System.currentTimeMillis ()
  3. Lors de la création de la table SQLite, spécifiez une valeur par défaut pour la colonne created_date comme date/heure.
  4. Utilisez SQLiteDatabase.execSQL pour insérer directement.
7
sooniln

Pour moi, le problème semble que vous envoyez "datetime('now')" sous forme de chaîne plutôt que de valeur.

Mon idée est de trouver un moyen de saisir la date/heure actuelle et de l'envoyer à votre base de données sous forme de valeur date/heure, ou de trouver un moyen d'utiliser le paramètre (DATETIME('NOW')) Intégré de SQLite

Consultez les réponses à la question cette question de SO.com - elles pourraient vous conduire dans la bonne direction.

Espérons que cela aide!

6
Jared Harley

Vous pouvez utiliser la fonction de Java, à savoir:

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é comme suit:

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

Au lieu de l dans new Date (l), vous devez insérer le numéro dans la colonne de date.
Donc, vous avez votre date.
Par exemple, j'enregistre dans ma base de données ce numéro: 1332342462078
Mais quand j'appelle la méthode ci-dessus, j'ai ce résultat: 21 mars 2012 16.07.42

4
Marco Gallella

Sur la base de @ e-satis answer, j'ai créé une méthode privée sur ma classe "DBTools". L'ajout de la date actuelle est donc très simple:

...
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
Cedric Simon

Cet exemple de code peut faire ce que vous voulez:

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

1
Kristy Welsh

Fonctionne pour moi parfait:

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

Enregistrez votre date comme un long.

1
Stefan Beike

Assurez-vous que le champ n'est pas marqué comme "non nul" en même temps que vous essayez d'insérer un horodatage par défaut à l'aide de l'expression "(DATETIME (" maintenant "))"

0