作为标题,我试图更新存储在SQLiteDatabase中的特定数据,但它会更新其中的每个项目。
我正在尝试做一个做笔记应用程序。到目前为止,它可以保存我想要正确保存的内容,但是当我尝试编辑便笺时,问题就来了。
当我按下“编辑”按钮时,它会更改所有已保存的笔记,包括要编辑的笔记。
该注释定义为MemoItem对象,即MemoItem memoItem = new MemoItem(),并且具有以下变量:字符串saveTime,备忘录和类别。
当我点击要编辑的便笺时,便成功保存了保存的值,是的。
以防万一,在我的SQLiteOpenHelper类中声明了以下内容:
public class MemoListDbHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "MemoListDB.db";
public static class MemoEntry implements BaseColumns {
public static final String TABLE_NAME = "entry";
public static final String COLUMN_CATEGORY = "category";
public static final String COLUMN_SAVED_TIME = "savedTime";
public static final String COLUMN_MEMO = "memo";
}
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + MemoEntry.TABLE_NAME + " (" +
MemoEntry._ID + " INTEGER PRIMARY KEY," +
MemoEntry.COLUMN_CATEGORY + " TEXT," +
MemoEntry.COLUMN_SAVED_TIME + " TEXT," +
MemoEntry.COLUMN_MEMO + " TEXT )";
}
我在Helper类中做了一个updateNote()方法:
public void updateNote(MemoItem memoItem) {
if (memoItem == null) {
return;
}
SQLiteDatabase db = getReadableDatabase();
ContentValues values = new ContentValues();
values.put(MemoEntry.COLUMN_MEMO, memoItem.memo);
db.update(MemoEntry.TABLE_NAME, values, "_id=" + MemoEntry._ID, null);
}
编辑按钮位于一个称为MemoFragment的片段内。
被重写的onClick方法中包含另一个名为updateMemoOnClick()的方法。
单击按钮时,它将创建一个新的MemoItem对象,该对象具有用户放入的类别,备忘录和节省的时间,并将该对象传递给上面的updateNote()方法:
private void updateMemoOnClick() {
MemoItem memoItem = new MemoItem();
memoItem.memo = memoEditText.getText().toString();
memoItem.category = selectedBodyPartTextView.getText().toString();
memoItem.startedTime = startTimeTextView.getText().toString();
memoListDbHelper.updateMemo(memoItem);
}
为什么我的SQLite update()更新数据库中的所有项目?
有人可以帮忙吗?我已经有半天时间在解决这个问题了。预先感谢!
答案 0 :(得分:2)
您在这里犯错
cout << (void*)ptr << endl;
用您的行ID替换 db.update(MemoEntry.TABLE_NAME, values, "_id=" + MemoEntry._ID, null);
。像MemoEntry._ID
memoItem.id
答案 1 :(得分:1)
您可以尝试其他更新方式
db.update(MemoEntry.TABLE_NAME, values, "_id=?", new String[]
{String.valueOf(memoItem._ID)});
OR
db.update(MemoEntry.TABLE_NAME, values, "_id='" + memoItem._ID+"'", null);
答案 2 :(得分:0)
我假设您正在回收站视图中显示备忘录条目,因此,为了做到这一点,您需要许多MemoEntry对象。您不需要memoItem对象。
您可以通过以下方法检索条目列表:
public ArrayList<MemoEntry> getMemoEntries(SQLiteDatabase db){
ArrayList<MemoEntry> entries = new ArrayList<>();
Cursor c;
c = db.rawQuery("SELECT * FROM " + ENTRY_TABLE, null)
if(c != null && c.moveToFirst()){
while(!c.isAfterLast()){
MemoEntry entry = new MemoEntry();
entry.setId(c.getInt(c.getColumnIndex(Memo_Entry._ID)));
entry.setCategory(c.getString(c.getColumnIndex(Memo_Entry.COLUMN_CATEGORY)));
entry.setMemo(c.getString(c.getColumnIndex(Memo_Entry.COLUMN_MEMO)));
entries.add(entry);
c.moveToNext();
}
c.close();
}
return entries;
当您编辑条目时,可以引用对象ID字段。 然后,用户保存后即可使用以下查询。
db.RawQuery("UPDATE " + MemoEntry.TABLE_NAME + " SET " + MemoEntry.COLUMN_MEMO + " = " MemoEntry.memo + " WHERE " + MemoEntry.COLUMN_ID+ " = " + memoEntry._id ,null);
我认为这里的困惑在于您是否将列名放在MemoEntry对象中?
更新节省的时间可能也是个好主意。