如何从单个 SQLite 数据库列中获取所有数据以计算总价

How to get all data from a single SQLite database column for calculating total price

我目前正在制作一个带有购物车的购物应用程序。我让列表视图显示正确的数量和价格,但现在在尝试显示结账总价时遇到问题。我面临 2 个问题:

  1. 如何从整个列中获取数据,目前我只能从预期列的第一个索引中获取数据。

  2. 当我清除 database/clear 购物车时,应用程序崩溃,说有一个空值。可能是由于游标无法从数据库中读取任何内容。

CartDatabaseHelper.java getCartPrice() 方法

public Double getCartPrice() {
    String query = "SELECT * FROM " + CartContract.CartEntry.TABLE_NAME + " WHERE Cart_Meal_Price";
    SQLiteDatabase dbCart;
    dbCart = this.getWritableDatabase();
    Cursor cursor = dbCart.rawQuery(query, null);
    cursor.moveToFirst();
    do{if (cursor!=null) {
        Double totalPrice = cursor.getDouble(2);
        Double sum =+ totalPrice;
        return sum;
    } else {
        return 0.00;
    }}while(cursor.moveToNext());
}

CartDataBaseHelper.java 购物车数据库的声明和初始化

public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "CartDatabase";
public static final String CART_TABLE = "CartTable";

public static final String CREATE_CART_TABLE = "CREATE TABLE " + CartContract.CartEntry.TABLE_NAME + " ( " +
        CartContract.CartEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        CartContract.CartEntry.COLUMN_NAME + " TEXT ," +
        CartContract.CartEntry.COLUMN_PRICE + " REAL , " +
        CartContract.CartEntry.COLUMN_QUANTITY + " REAL ) " ;

SummaryActivity.java getTotalPrice() 方法

public void getTotalPrice() {
    cartDB = new CartDatabaseHelper(this);
    double total = cartDB.getCartPrice();
    totalprice.setText("Total Price : RM" + total);
    }

SummaryActivity.java 清除数据库onClickListener

clearthedata.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int deletethedata = getContentResolver().delete(CartContract.CartEntry.CONTENT_URI, null, null);
            cartDB = new CartDatabaseHelper(context);
            double total = cartDB.getCartPrice();
            if (cartDB != null) {
                totalprice.setText("Total Price : RM" + total);
            } else {
                totalprice.setText("Total Price : RM0.00");
            }
        }
    });

如果你想获得table中列CartContract.CartEntry.COLUMN_PRICE的所有值的总和,那么你需要这样的查询:

SELECT COALESCE(SUM(price), 0) FROM tablename

此处COALESCE()用于return0以防table为空

所以你的代码应该是:

public double getCartPrice() {
    String query = "SELECT COALESCE(SUM(" + CartContract.CartEntry.COLUMN_PRICE + "), 0) FROM " + CartContract.CartEntry.TABLE_NAME;
    SQLiteDatabase dbCart = this.getWritableDatabase();
    Cursor cursor = dbCart.rawQuery(query, null);
    cursor.moveToFirst();
    double total = cursor.getDouble(0);
    cursor.close();
    dbCart.close();
    return total;
}

如果要删除table的所有行,那么:

SQLiteDatabase dbCart = this.getWritableDatabase();
dbCart.delete(CartContract.CartEntry.TABLE_NAME, null, null);