Сумма возврата (item_price) из sqlite в Android

Я пытаюсь получить сумму из определенного столбца в базе данных. Я думаю, что мой запрос в порядке, но я думаю, что что-то не так с его получением. Пожалуйста, направь меня по правильному пути.

Огромное спасибо заранее.

public static double countPrice (SQLiteDatabase db, int selectedID){
    String[] sumPrice = new String[]{"sum(item_price)"};
    String selection = "list_id =? AND item_flag =?";
    String[] selectionArgs = new String[]{String.valueOf(selectedID), String.valueOf(0)};

    Cursor c = db.query(TABLE_NAME, sumPrice, selection, selectionArgs, null, null, null);

    double result = c.getCount();
    return result;
}
stackoverflow.com/a/20582538/4168607
ADM 22.05.2018 06:39

Спасибо за ответ, я постараюсь вернуть результат.

Prin Puyakul 22.05.2018 07:24
2
2
194
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы возвращаете cursor.getCount (), который возвращает количество строк, но не сумму. Курсор Android

Используйте следующий код:

Cursor cur = db.rawQuery("SELECT SUM(myColumn) FROM myTable", null);
if (cur.moveToFirst())
{

return cur.getInt(0);
}

Привет, Спасибо за ответ, я попробовал double result; if (c.moveToFirst()) { result = c.getDouble(0); } return result;, но он дал мне ошибку, сказал, что результат не инициализирован, есть идеи, почему?

Prin Puyakul 22.05.2018 07:22

на самом деле я знаю почему, моя глупая ошибка = /, но большое спасибо за вашу помощь =) признателен.

Prin Puyakul 22.05.2018 07:31
Ответ принят как подходящий

Вы используете метод Cursor getCount(), который вернет количество строк, которое будет равно 1, поскольку запрос возвращает агрегат (то есть сумму).

Вместо этого вам нужно

  • а) перейти к первой строке курсора, а затем
  • б) прочитать / извлечь данные из соответствующего столбца, используя соответствующий метод Cursor get???.

Таким образом, ваш код может быть: -

public static double countPrice (SQLiteDatabase db, int selectedID){
    String[] sumPrice = new String[]{"sum(item_price)"};
    String selection = "list_id =? AND item_flag =?";
    String[] selectionArgs = new String[]{String.valueOf(selectedID), String.valueOf(0)};

    Cursor c = db.query(TABLE_NAME, sumPrice, selection, selectionArgs, null, null, null);

    Double result = 0; // default value to signify nothing extracted
    if (c.moveToFirst()) { // move to the first(only) row in the Cursor
        result = c.getDouble(0); // get the value from the first column
    }
    c.close(); // Should always close cursors when done with them
    return result; // Ok to return extracted value (or default for nothing extracted)
}

Большое спасибо за вашу помощь, это работает, и я узнаю что-то новое сегодня, я благодарен. знак равно

Prin Puyakul 22.05.2018 07:32

Другие вопросы по теме