2015-04-18 2 views
0

У меня есть метод, который должен обновить 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 <> ? и не журнал ошибок не срабатывает, что также кажется правильным для меня.

ответ

1

rawQuery используется для выполнения запросов, т. Е. Операторов SELECT. Для выполнения других операторов SQL используйте вместо этого execSQL.

Также проверьте, действительно ли вы хотите обработать свои идентификаторы в виде строк.

+0

Doc 'execSQL':« Выполните один оператор SQL, который НЕ является SELECT/INSERT/UPDATE/DELETE. » – Chris

+0

@Chris Документация неверна; эта функция не * предназначена * для выполнения этих команд, потому что нет возвращенного курсора (для SELECT) или уже есть специализированные функции (для остальных). –

+0

Спасибо, кажется, сейчас работает. Какова цель жизни, когда документация неверна: / – Chris

0

Если ваш синтаксис обновления правильно, то:

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

, где не использовали ли вы: getUnreadPrivateMessageCount(), не где, так что это должно быть что-то вроде этого:

public void increaseUnreadMessageCount(int userID) { 
    String query = "UPDATE " + tableName + " SET " + DatabaseHelper.KEY_USER_UNREAD_MESSAGE_COUNT + " = " 
      + getUnreadPrivateMessageCount() + " WHERE " + DatabaseHelper.KEY_USER_USER_ID 
      + " = ?"; 
    Log.i("query", query); 
    db.rawQuery(query, new String[] { String.valueOf(userID) }); 
} 

Таким образом, общая непрочитанных сообщений передается в таблицу.

+0

Метод, очевидно, вызывается в другом месте. – Chris

Смежные вопросы