android.la base de données.sqlite.SQLiteDatabase.rawQuery() n'est pas mise à jour d'une colonne DATETIME avec SQLite datetime() la fonction
public Cursor set_datetime_next(Reminder r) {
String _newVal = "datetime('now', '+7 days')";
String[] args = { new Integer(r.getID()).toString() };
String query =
"UPDATE " + DBConst.TABLE
+ " SET " + DBConst.f_DATETIME_NEXT + "=" + _newVal
+ " WHERE " + DBConst.f_ID +"=?";
Log.i(TAG, query);
return db.rawQuery(query, args);
}
J'ai aussi essayé de passer en datetime('now', '+7 days')
comme un paramètre de limite, qui ne fonctionnera pas, comme le Android documentation dit:
Les valeurs pourront être tenus comme des Chaînes de caractères.
Références:
- http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
- http://www.sqlite.org/lang_datefunc.html
- est _newval: datetime('now', '+7 jours) ou "datetime('now', '+7 jours)" ?
- Salut Guido, j'ai mis à jour l'exemple de code pour répondre à votre question.
Vous devez vous connecter pour publier un commentaire.
Le curseur n'a pas été fermé.
Tout qui fait sens, ce qui m'étonne vraiment, c'est l'exigence de l'appel
moveToFirst()
(ou une autre fonction qui pourrait "travailler avec" le curseur d'une certaine façon).Sans l'appel à la fois à
moveToFirst()
etclose()
, la ligne n'a jamais été mis à jour.close()
par lui-même, après larawQuery()
, n'a rien fait.moveToFirst()
n'a pas de sens pour moi, mais obtient le travail fait.Puisque c'est un
UPDATE
déclaration, vous pouvez utiliserexecSQL()
plutôt querawQuery()
. Vous ne voudriez pas avoir à s'embêter avec les curseurs (qui est un peu bête pour unUPDATE
déclaration).Cependant, vous aurez à la place des valeurs dans votre
WHERE
déclaration au lieu de passer des arguments, commeexecSQL()
n'accepte qu'un seul argument de type String pour votre instruction SQL. Aussi,execSQL()
est de type void.- Je utiliser
execSQL()
pour à peu près toutes les instructions SQL à l'exceptionSELECT
...