Android SQL更新表

时间:2011-08-28 15:42:31

标签: android sql

我正在升级我的数据库以添加另一列。我想要做的是(在onUpgrade中添加列之后)从每个表的主活动调用此方法(3个已升级)。该方法应该用“1”替换新列中的所有空格。

代码运行正常,单步执行,布尔测试每次都是true但是当我打开表查看数据时,整个列都是空白的。奇怪的是,我的rowId数字每次递增。它从3行开始,rowIds分别为1,2,3。在我的代码运行一次后,它们现在的rowIds分别为4,5,6。

任何人都可以帮助我吗? KEY_ROWID只是我的自动rowId编号。 KEY_MODE只是列标题的“模式”。如果我运行调试它,我在代码中显示的三行(它通过while循环运行3次)。

public void checkBlanks(String table) {
    Cursor cursor =  mDb.query(table, new String[] {KEY_ROWID, KEY_MODE}, null, null, null, null, null);
    while (cursor.moveToNext()) {
        int modeCol = cursor.getColumnIndexOrThrow(KEY_MODE);
        if (cursor.isNull(modeCol)) {

            int rowId = cursor.getInt(cursor.getColumnIndexOrThrow(KEY_ROWID));
            ContentValues args = new ContentValues();
            args.put(KEY_MODE, 1); // replace the blank space with a "1"
            boolean test = mDb.update(table, args, KEY_ROWID + "=" + rowId, null) > 0;
        }
    }
    cursor.close();

}

2 个答案:

答案 0 :(得分:0)

为什么不利用SQL的强大功能并更新一次调用中的所有行,而不是手动循环遍历行? E.g。

mDb.execSQL("UPDATE " + table + " SET " + KEY_MODE + " = 1;");

由于它非常简单,您可以在onUpgrade()方法中执行此操作。

答案 1 :(得分:0)

你可以做得那么容易:

1。)在onUpgrade()期间:"添加列newcolumn default 1"。这将添加一个新列,其中所有newcolumns包含1。

2。)onUpgrade()已经运行:update table set newcolumn = 1:没有WHERE子句,整个表都会受到影响。

不需要走遍所有行。

你想做什么需要SELECT ... FOR UPDATE OF / UPDATE ... FOR CURRENT OF。我没有用SQLite做到这一点,所以我不知道这是否支持。

在你的情况下(onUpgrade已经运行)使用2。)