android.database.sqlite.SQLiteDatabase.rawQuery () не обновляет столбец DATETIME с функцией SQLite datetime () - PullRequest
20 голосов
/ 08 августа 2011
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);
}

Я также попытался передать datetime('now', '+7 days') в качестве связанного параметра, который не будет работать, поскольку документация Android говорит:

Значения будут связаны как строки.

Ссылки:

Ответы [ 2 ]

54 голосов
/ 09 августа 2011

Курсор не был закрыт.

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();     
}

Хотя это и имеет смысл, меня действительно озадачивает требование вызова moveToFirst() (или какой-либо другой функции, которая "работала бы" с курсором в некоторыхway).
Без вызова как moveToFirst(), так и close() строка никогда не обновлялась.close() сам по себе, после rawQuery(), ничего не сделал.

20 голосов
/ 03 октября 2011

Поскольку это оператор UPDATE, вы можете использовать execSQL() вместо rawQuery().Вам не придется беспокоиться о курсорах (что довольно глупо для оператора UPDATE).
Однако вам придется помещать значения в оператор WHERE вместо передачи аргументов, поскольку execSQL() принимает толькоодин строковый аргумент для вашего оператора SQL.Кроме того, execSQL() имеет тип void.

Я использую execSQL() почти для всех операторов SQL, кроме SELECT ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...