如何在Sqliteandroid中使用算术表达式更新行



我想要的是在Sqlite android中的现有值中添加和删除新值。我从android文档中读到的是这个方法,但在我的情况下它不起作用,因为它正在用提供的新值删除现有值。

这是我的代码:

public boolean updateCigaretteStock(String cigaretteName, int quantity, int totalCost) {
ContentValues values = new ContentValues();
values.put(CigaretteStockEntry.COLUMN_QTY, quantity);
values.put(CigaretteStockEntry.COLUMN_TOTAL_COST, totalCost);
String whereClause = CigaretteStockEntry.COLUMN_CIGARETTE_NAME + " = ?";
String[] whereArgs = {cigaretteName};
int rowAffected = writableDatabase.update(CigaretteStockEntry.TABLE_NAME, values, whereClause, whereArgs);
return (rowAffected > 0);
}

我也尝试过修改方法:

public boolean updateCigaretteStock(String cigaretteName, int quantity, int totalCost) {
ContentValues values = new ContentValues();
values.put(CigaretteStockEntry.COLUMN_QTY, CigaretteStockEntry.COLUMN_QTY + " + " + quantity);
values.put(CigaretteStockEntry.COLUMN_TOTAL_COST, CigaretteStockEntry.COLUMN_TOTAL_COST + " + " + totalCost);
String whereClause = CigaretteStockEntry.COLUMN_CIGARETTE_NAME + " = ?";
String[] whereArgs = {cigaretteName};
int rowAffected = writableDatabase.update(CigaretteStockEntry.TABLE_NAME, values, whereClause, whereArgs);
return (rowAffected > 0);
}

但它也不起作用。它在列中显示值,例如:

(quantity + new value)
(total_cost + new value)

有什么帮助吗?

如果我正确理解你的问题,你正试图按照以下查询的行来增加某些列的值:

UPDATE CigaretteStock
SET
qty = qty + ?,
totalcost = totalcost + ?;

您所使用的特定API的问题在于,它只允许对给定列中的值进行重影(完全覆盖(。但是,您希望实际使用已经存在的值作为更新的一部分。

在这种情况下,我建议只使用SQLite Android准备好的声明API:

String sql = "UPDATE CigaretteStock ";
sql += " SET " + CigaretteStockEntry.COLUMN_QTY + " = " +
CigaretteStockEntry.COLUMN_QTY + " + ?, ";
sql += CigaretteStockEntry.COLUMN_TOTAL_COST + " = " +
CigaretteStockEntry.COLUMN_TOTAL_COST + " + ?";
SQLiteStatement statement = db.compileStatement(sql);
statement.bindDouble(1, quantity);
statement.bindDouble(2, totalCost);
int numberOfRowsAffected = statement.executeUpdateDelete();

尝试如下修改代码:

public boolean updateCigaretteStock(String cigaretteName, int quantity, int totalCost) {
ContentValues values = new ContentValues();
values.put(CigaretteStockEntry.COLUMN_QTY, quantity + "");
values.put(CigaretteStockEntry.COLUMN_TOTAL_COST, totalCost  + "");
String whereClause = CigaretteStockEntry.COLUMN_CIGARETTE_NAME + " = ?";
String[] whereArgs = {cigaretteName};
int rowAffected = writableDatabase.update(CigaretteStockEntry.TABLE_NAME, values, whereClause, whereArgs);
return (rowAffected > 0);
}

上面的代码用新值覆盖旧值。如果你想在旧值中添加新值,那么你需要先读取旧值,然后再将其添加到新值中&而不是传入内容值。

最新更新