按下按钮时更新数据库中的行
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方法中创建条目)
答案 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
}