如何在SQLite列中添加当前值?

时间:2014-04-14 16:37:33

标签: java android sqlite sql-update add

我试图添加到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);
    }

2 个答案:

答案 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)