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

Java 如何从单个SQLite数据库列获取所有数据以计算总价,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我目前正在用购物车制作一个购物应用程序。我让listview显示适当的数量和价格,但现在在尝试显示结帐总价时遇到问题。我面临两个问题: 如何从整个列中获取数据,目前我只能从预期列的第一个索引中获取数据 当我清除数据库/清除购物车时,应用程序崩溃,表示存在空值。可能是因为游标无法从数据库中读取任何内容 CartDatabaseHelper.javagetCartPrice()方法 CartDataBaseHelper.java购物车数据库的声明和初始化 SummaryActivity.java

我目前正在用购物车制作一个购物应用程序。我让listview显示适当的数量和价格,但现在在尝试显示结帐总价时遇到问题。我面临两个问题:

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

  • 当我清除数据库/清除购物车时,应用程序崩溃,表示存在空值。可能是因为游标无法从数据库中读取任何内容

  • CartDatabaseHelper.javagetCartPrice()方法

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

    SummaryActivity.javagetTotalPrice()方法

    SummaryActivity.java清除数据库onClickListener


    如果要获取表中列
    CartContract.carentry.column\u 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.delete
    totalprice.setText(“总价:RM0.00”)。然后它就完美地工作了。
    
    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");
                }
            }
        });
    
    SELECT COALESCE(SUM(price), 0) FROM tablename
    
    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);