JD.*_*JD. 20 sqlite android date sql-update
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);
}
Run Code Online (Sandbox Code Playgroud)
我也试过传入datetime('now', '+7 days')
作为绑定参数,这将无法工作,因为Android文档说:
这些值将绑定为字符串.
参考文献:
JD.*_*JD. 54
光标未关闭.
public void set_datetime_next(Reminder r, String _newVal) {
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);
Cursor cu = db.rawQuery(query, args);
cu.moveToFirst();
cu.close();
}
Run Code Online (Sandbox Code Playgroud)
虽然这是有道理的,但让我感到困惑的是调用的要求moveToFirst()
(或某些其他功能以某种方式"与光标一起工作").
如果没有呼叫既moveToFirst()
和close()
,该行从未更新. close()
在它之后rawQuery()
,什么也没做.
Jab*_*ari 20
因为它是一个UPDATE
声明,你可以使用execSQL()
而不是rawQuery()
.你不必费心游戏(这对于一个UPDATE
声明来说有点愚蠢).
但是,您必须在WHERE
语句中放置值而不是传递args,因为execSQL()
只接受SQL语句的单个String参数.此外,execSQL()
是void类型.
我execSQL()
用于几乎所有的SQL语句,除了SELECT
...
归档时间: |
|
查看次数: |
14091 次 |
最近记录: |