Как обновить строку с арифметическим выражением в Sqlite Android - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу добавить и удалить новое значение к существующему значению в 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 ]

0 голосов
/ 10 декабря 2018

Попробуйте изменить код, как показано ниже:

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 голосов
/ 10 декабря 2018

Если я правильно понимаю ваш вопрос, вы пытаетесь увеличить определенные значения столбцов в соответствии со строками следующего запроса:

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

Проблема с конкретным API, который вы используетеявляется то, что это позволяет только забить (полностью перезаписать) значение в данном столбце.Но вы на самом деле хотите использовать значение, которое уже есть в этом обновлении.

В этом случае я бы предложил использовать API подготовленных операторов SQLite для Android:

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();
...