Возврат суммы (item_price) из sqlite в Android - PullRequest
0 голосов
/ 22 мая 2018

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

Заранее большое спасибо.

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

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

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

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

  • a) перейти к первой строке курсора и затем
  • b) прочитать / извлечь данные из соответствующего столбца, используя соответствующий метод 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)
}
0 голосов
/ 22 мая 2018

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

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

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

return cur.getInt(0);
}
...