Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android.database.sqlite.SQLiteDatabase.rawQuery()未使用sqlite DATETIME()函数更新日期时间列_Android_Sqlite_Date_Sql Update - Fatal编程技术网

android.database.sqlite.SQLiteDatabase.rawQuery()未使用sqlite DATETIME()函数更新日期时间列

android.database.sqlite.SQLiteDatabase.rawQuery()未使用sqlite DATETIME()函数更新日期时间列,android,sqlite,date,sql-update,Android,Sqlite,Date,Sql Update,我还尝试将datetime('now','+7天')作为绑定参数传递,但这不起作用,如所述: 这些值将被绑定为字符串 参考资料: 光标未关闭 public Cursor set_datetime_next(Reminder r) { String _newVal = "datetime('now', '+7 days')"; String[] args = { new Integer(r.getID()).toString() }; String qu

我还尝试将
datetime('now','+7天')
作为绑定参数传递,但这不起作用,如所述:

这些值将被绑定为字符串

参考资料:


光标未关闭

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);
}
虽然这是有道理的,但真正让我困惑的是调用
moveToFirst()
(或以某种方式“使用”光标的其他函数)的要求。

如果不同时调用
moveToFirst()
close()
,则该行永远不会更新
close()
rawQuery()
之后,它本身什么也没做。

因为它是一个
UPDATE
语句,所以您可以使用
execSQL()
而不是
rawQuery()
。您不必为游标而烦恼(对于
UPDATE
语句来说,这有点傻)。
但是,您必须在
WHERE
语句中放置值,而不是传递参数,因为
execSQL()
只接受SQL语句的单个字符串参数。另外,
execSQL()
的类型为void


我使用
execSQL()
来处理几乎所有的SQL语句,除了
SELECT

是_newval:datetime('now','+7天')还是“datetime('now','+7天')”?嗨,Guido,我已经更新了代码示例来回答你的问题。我已经将返回代码更改为void,因为调用方没有理由使用结果集。谢谢,这是一个救命恩人!Android上的db处理实现得非常糟糕,如果你问我这是多么出色,关键是moveToFirst(),我从插入的记录中获取id后遇到了问题。通过在光标开始之前添加moveToFirst()解决了这个问题。看这个,;cr.moveToFirst();int brandID=cr.getInt(cr.getColumnIndex(DatabaseTables.colBrandID));哎呀,那愚蠢的第一步一整天都在折磨我!谢谢你救了我的命。这很有帮助。虽然
moveToFirst()
对我来说毫无意义,但它完成了工作。这应该是公认的答案,比rawQuery对这种情况更直观。
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();     
}