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')".
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);
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
)
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);
il y a quelques options que vous pouvez utiliser:
- vous pouvez essayer d'utiliser la chaîne de caractères " (DATETIME('now')) " à la place.
- insérez la date vous-même, c'est-à-dire avec le système.currentTimeMillis ()
- 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.
- Use SQLiteDatabase.execSQL à insérer directement.
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!
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
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());
Fonctionne pour moi parfait:
values.put(DBHelper.COLUMN_RECEIVEDATE, geo.getReceiveDate().getTime());
Save your date comme une longue.
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')) "