如何在Sqlite android中使用算术表达式更新行
我想要的是在Sqlite android中向现有值添加和删除新值。 我从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
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,然后发现错误说没有这样的表,然后我包括我的表。NSET
关键字,前后应该有空格。你能更新你的答案吗,这样无论谁面对同样的问题都不会遇到任何错误?我已经做出了改变。很高兴我能帮助你。@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”
我应该使用它吗?