我试图添加到rowid为0的人员的信用列中已经存在的当前数字。因此,如果当前值为5并且用户在微调器中选择数字2并单击该按钮,则值将更改为7.但是,该值只会更新为2.我需要添加/更改此代码才能实现此目的?
public void upDateUser(int money)
{
String selectQuery = "SELECT " + KEY_CREDITS + " from " +
DATABASE_TABLE + " where " + KEY_ROWID + " = " + 0;
Cursor c = ourDatabase.rawQuery(selectQuery, null);
int oldMoney = 0;
if (c.moveToFirst())
{
oldMoney = oldMoney + Integer.parseInt(c.getString(4));
}
ContentValues cvUpdate = new ContentValues();
cvUpdate.put(KEY_CREDITS, (oldMoney + money));
ourDatabase.update(DATABASE_TABLE, cvUpdate, null, null);
}
答案 0 :(得分:0)
您错过了更新部分中的where子句
ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_ROWID + "=?" ,new String[] { "1" });
我猜它已更新为2,因为如果没有where子句,则更新所有条目。它没有更新为7,因为您的Select语句没有结果(不知道原因,更多代码会有用)。检查select是否选择一行:
public void upDateUser(int money)
{
String selectQuery = "SELECT " + KEY_CREDITS + " from " +
DATABASE_TABLE + " where " + KEY_ROWID + " = " + 1;
Cursor c = ourDatabase.rawQuery(selectQuery, null);
int oldMoney = 0;
Log.d("com.example.yourapp", c.getCount() + " rows selected");
if (c.moveToFirst())
{
oldMoney = c.getInt(c.getColumnIndex(KEY_CREDITS));
}
ContentValues cvUpdate = new ContentValues();
cvUpdate.put(KEY_CREDITS, (oldMoney + money));
ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_ROWID + "=?" ,new String[] { "1" });
}
检查日志结果有多大。
我希望这会对你有所帮助。
@Edit:Documentation of update @ Edit2:更新了解决方案
答案 1 :(得分:0)
而不是使用 cvUpdate.put中的oldMoney + money 为什么不在调用put之前创建一个变量 updateValue = oldMoney + money 然后执行cvUpdate.put(KEY_CREDITS,updateValue)