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