0

当我按下按钮时更新数据库中的一行

public void updateContact(long id, String x, String y,String angle)
        {
        ContentValues editCon = new ContentValues();
        editCon.put(KEY_X, x);
        editCon.put(KEY_Y, y);
        editCon.put(KEY_ANGLE, angle);

        ourDatabase.update(DATABASE_TABLE, editCon, KEY_ROWID + id, null);

        }

我用它entry.updateContact(1, Double.toString(db1), Double.toString(db2), Double.toString(db3));

但我得到了例外:no such colum: _id1 (code1): , while compiling: UPDATE SavedTable SET position_y=?, position_x=?, position_angle=? WHERE_id1

即使我有一个只有一行的数据库(我在主要活动的 oncreate 方法中创建条目)

4

2 回答 2

1

您需要修复您的update()方法:

db.update(DATABASE_TABLE, editCon, KEY_ROWID + " = ?", 
          new String[] {String.valueOf(id)});

问题是您指定了不正确的WHERE子句。你写了这个:

KEY_ROWID + id

这在数据库层_id1上被翻译为它被解释为列的位置。

您需要_id = 1,这是通过KEY_ROWID + " = ?"将占位符替换为字符串数组中的值来实现的。

于 2013-04-01T12:58:30.280 回答
1

KEY_ROWID + id不会像你期望的那样工作!KEY_ROWID可能是一个包含字符串,_id而您的id变量包含1将导致_id1.

你需要这个:

ourDatabase.update(DATABASE_TABLE, editCon, KEY_ROWID + "=" + id, null);

或更好:

ourDatabase.update(DATABASE_TABLE, editCon, KEY_ROWID + "=?", new String[]{String.valueOf(id)});

编辑:

// pseudocode
Cursor c = ourDatabase.query(DATABASE_TABLE, null, null....);
if (c != null) {
    if (c.getCount() >= 1) {
        // there is an entry - just update
    } else { 
        // no entry - create entry
    }
} else {
    // error? But definitively no entry so create one
}
于 2013-04-01T12:59:24.817 回答