在android中更新数据库sqlite时遇到异常

时间:2013-04-01 12:54:12

标签: android sqlite

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

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方法中创建条目)

2 个答案:

答案 0 :(得分:1)

您需要修复update()方法:

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

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

KEY_ROWID + id

这在数据库图层上被翻译为 _id1 ,其中它被解释为列。

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

答案 1 :(得分: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
}