如何从单个 SQLite 数据库列中获取所有数据以计算总价
How to get all data from a single SQLite database column for calculating total price
我目前正在制作一个带有购物车的购物应用程序。我让列表视图显示正确的数量和价格,但现在在尝试显示结账总价时遇到问题。我面临 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);
我目前正在制作一个带有购物车的购物应用程序。我让列表视图显示正确的数量和价格,但现在在尝试显示结账总价时遇到问题。我面临 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);