【问题标题】:How can I add to the current value in SQLite column?如何添加到 SQLite 列中的当前值?
【发布时间】:2014-04-14 16:37:33
【问题描述】:

我试图只添加到他们的 rowid 为 0 的人的 credits 列中的当前数字。因此,如果当前值为 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);
    }

【问题讨论】:

  • int oldMoney=0; 替换为 KEY_CREDITS 的值

标签: java android sqlite sql-update add


【解决方案1】:

你错过了更新部分的 where 子句

ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_ROWID + "=?" ,new String[] { "1" });

我猜它已更新为 2,因为没有 where 子句您会更新 ALL 条目。它没有更新到 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" });
}

检查日志你的结果有多大。

希望对你有帮助。

@编辑:Documentation of update @Edit2:更新了解决方案

【讨论】:

  • 感谢您的回复。它说选择了 0 行。我不明白为什么。
  • 有两种可能的选择。要么你的表是空的(插入语句在哪里?)或者没有KEY_ROWID = 0 的行。也许您可以添加其余的编码。删除 select 语句中的 where 子句,以了解您的表是否为空。
  • 我会发布其余的代码,但由于我的声誉,我只能在 8 小时后发布。关于插入语句。
  • 这是插入语句:ContentValues values = new ContentValues(); values.put(KEY_PFNAME, "name"); values.put(KEY_PSNAME, "名称"); values.put(KEY_CARD, 12345678); values.put(KEY_CREDITS, 5); values.put(KEY_ADDMONEY, 1); db.insert(DATABASE_TABLE, null, values); } 这是在 onCreate 方法中
  • 所以我猜KEY_ROWID 是一个自动增量,不是吗?如果这是正确的,它以KEY_ROWID = 1 开头,而不是0。检查这是否解决了问题(将0 替换为1
【解决方案2】:

而不是使用 oldMoney + cvUpdate.put 中的钱 为什么不在调用 put 之前创建一个变量 updateValue = oldMoney + 钱 然后做 cvUpdate.put(KEY_CREDITS, updateValue)

【讨论】:

  • 将实现这一点。此外,它没有更新,因为日志说选择了 0 行。不知道为什么我的代码没有选择 rowid 为 0 的行。因为我知道该行上有数据,因为我已经检索到它以显示在活动中。
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 2015-02-09
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多