【问题标题】:How to get all data from a single SQLite database column for calculating total price如何从单个 SQLite 数据库列中获取所有数据以计算总价
【发布时间】:2021-03-27 15:04:42
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java android sqlite android-sqlite


    【解决方案1】:

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

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

    这里COALESCE() 用于返回0,以防表为空。

    所以你的代码应该是:

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

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

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

    【讨论】:

    • 它可以工作,但是当我单击“清除数据库”按钮时它崩溃了。所以我不得不删除所有内容并留下dbCart.deletetotalprice.setText("Total Price : RM0.00");。然后它完美地工作了。
    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多