У меня есть метод, который должен обновить unreadMessageCount данного пользователя.Значение базы данных приращения Android на единицу
public void increaseUnreadMessageCount(int userID) {
String query = "UPDATE " + tableName + " SET " + DatabaseHelper.KEY_USER_UNREAD_MESSAGE_COUNT + " = "
+ DatabaseHelper.KEY_USER_UNREAD_MESSAGE_COUNT + " + 1 WHERE " + DatabaseHelper.KEY_USER_USER_ID
+ " = ?";
Log.i("query", query);
db.rawQuery(query, new String[] { String.valueOf(userID) });
}
Это вычисляется: UPDATE user SET unreadPrivateMessageCount = unreadPrivateMessageCount + 1 WHERE userID = ?
, который кажется правильным для меня. Но почему-то это не работает, строка всегда 0.
Или мое предложение SELECT не так?
public int getUnreadPrivateMessageCount() {
String query = "SELECT SUM(" + DatabaseHelper.KEY_USER_UNREAD_MESSAGE_COUNT + ") AS messageCount FROM "
+ tableName + " WHERE " + DatabaseHelper.KEY_USER_UNREAD_MESSAGE_COUNT + " <> ?";
Log.i("query", query);
Cursor cursor = db.rawQuery(query, new String[] { "0" });
int messageCount = 0;
if (cursor.getCount() > 0) {
if (cursor.moveToFirst()) {
messageCount = cursor.getInt(cursor.getColumnIndexOrThrow("messageCount"));
cursor.close();
} else {
Log.e("getUnreadPrivateMessageCount", "moveToFirst failed");
}
} else {
Log.e("getUnreadPrivateMessageCount", "count 0");
}
return messageCount;
}
Этот запрос вычисляет SELECT SUM(unreadPrivateMessageCount) AS messageCount FROM user WHERE unreadPrivateMessageCount <> ?
и не журнал ошибок не срабатывает, что также кажется правильным для меня.
Doc 'execSQL':« Выполните один оператор SQL, который НЕ является SELECT/INSERT/UPDATE/DELETE. » – Chris
@Chris Документация неверна; эта функция не * предназначена * для выполнения этих команд, потому что нет возвращенного курсора (для SELECT) или уже есть специализированные функции (для остальных). –
Спасибо, кажется, сейчас работает. Какова цель жизни, когда документация неверна: / – Chris