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

如何在Sqlite android中使用算术表达式更新行,android,sql-update,android-sqlite,Android,Sql Update,Android Sqlite,我想要的是在Sqlite android中向现有值添加和删除新值。 我从android文档中读到的是这个方法,但它在我的案例中不起作用,因为它正在用提供的新方法删除现有值 这是我的密码: public boolean updateCigaretteStock(String cigaretteName, int quantity, int totalCost) { ContentValues values = new ContentValues(); values.put(Ciga

我想要的是在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的prepared语句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);
}

以上代码用新值覆盖旧值。若要在旧值中添加新值,则需要先读取旧值,然后再将其添加到新值中&然后传入内容值

@Ari对不起,我想应该是
binddoull
。您需要包含WHERE语句,所以有3个参数。BindallargsaString也可以工作。e、 g.
String[]参数=新字符串[]{String.valueOf(数量),String.valueOf(总成本),cigaretteName};SQLiteStatement=mDB.compileStatement(sql);语句。bindallargsassstrings(参数)@Tim但这也让我有点困扰。我只是复制并粘贴了你的答案n,然后发现错误说没有这样的表,然后我包括我的表。N
SET
关键字,前后应该有空格。你能更新你的答案吗,这样无论谁面对同样的问题都不会遇到任何错误?我已经做出了改变。很高兴我能帮助你。@Tim Thank man really n我记得很久以前做过一个类似的应用程序,它只使用了一个原始的查询,比如
UPDATE TABLE\u NAME SET COLUMN\u 1=COLUMN\u 1+新值和COLUMN\u 2=COLUMN\u 2+新值WHERE combol\u NAME=“Pine”
我应该使用它吗?