首页 文章

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

提问于
浏览
2

我想要的是在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)

有帮助吗?

2 回答

  • 1

    尝试修改您的代码,如下所示:

    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);
    }
    

    上面的代码用新的代码覆盖旧值 . 如果要添加旧值而不是首先读取旧值,而不是将其添加到新值而不是传入内容值 .

  • 0

    如果我正确理解您的问题,您将尝试沿着以下查询的行增加某些列值:

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

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

    在这种情况下,我建议只使用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();
    

相关问题