android.database.sqlite.SQLiteDatabase.rawQuery () aktualisiert keine DATETIME-Spalte mit einer SQLite-Funktion datetime ()
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);
}
Habe ich auch schon versucht, die vorbeifahrenden datetime('now', '+7 days')
als parameter gebunden, das wird nicht funktionieren, da der Android-Dokumentation sagt:
Werte gebunden werden als Strings.
Referenzen:
- http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
- http://www.sqlite.org/lang_datefunc.html
InformationsquelleAutor der Frage JD. | 2011-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den cursor nicht geschlossen wurde.
Während das Sinn macht, was wirklich verwirrt mich ist das Erfordernis der Berufung
moveToFirst()
(oder eine andere Funktion, die würden "die Arbeit mit" den cursor in gewisser Weise).Ohne den Aufruf von sowohl
moveToFirst()
undclose()
, die Zeile wurde nie aktualisiert.close()
durch sich selbst, nach derrawQuery()
Tat gar nichts.InformationsquelleAutor der Antwort JD.
Da es ein
UPDATE
- Anweisung, die Sie verwenden könnenexecSQL()
eher alsrawQuery()
. Sie würde nicht die Mühe mit dem Cursor (das ist ein bisschen albern für eineUPDATE
- Anweisung).Jedoch, Sie müssen Werte in Ihrem
WHERE
- Anweisung statt der übergabe args, alsexecSQL()
akzeptiert nur ein einziges String-argument für die SQL-Anweisung. AuchexecSQL()
ist der Typ void.Benutze ich
execSQL()
für fast alle SQL-Anweisungen außerSELECT
...InformationsquelleAutor der Antwort Jabari