Java 如何更新房间数据库中的现有行?

Java 如何更新房间数据库中的现有行?,java,android,android-room,Java,Android,Android Room,我有一个DAO类,用于在特定日期已经存在注释时更新注释。如果是注释,DAO将创建一个新注释。以下是DAO接口: @Insert(onConflict = OnConflictStrategy.REPLACE) public long insertNote(Note note); @Update public int updateNote(Note note); 以下是我从数据库读取所有数据的方式: viewModel = ViewModelProviders.of(this).get(Not

我有一个DAO类,用于在特定日期已经存在注释时更新注释。如果是注释,DAO将创建一个新注释。以下是DAO接口:

@Insert(onConflict = OnConflictStrategy.REPLACE)
public long insertNote(Note note);

@Update
public int updateNote(Note note);
以下是我从数据库读取所有数据的方式:

viewModel = ViewModelProviders.of(this).get(NoteListViewModel.class);
viewModel.getNoteList().observe(MainActivity.this, new Observer<List<Note>>() {
      @Override
      public void onChanged(@Nullable List<Note> noteList) {
            Log.d("Note List Items", noteList.toString());
      }
});
viewModel=ViewModelProviders.of(this.get)(NoteListViewModel.class);
viewModel.getNoteList().observe(MainActivity.this,new Observator()){
@凌驾
公共void onChanged(@Nullable List noteList){
Log.d(“注释列表项”,noteList.toString());
}
});

现在,我不知道如何检查、比较和更新数据库中的现有行。

您的
注意
@Entity
类有一个主键
updateNote()
将基于该主键更新行。

您的
注意
@Entity
类具有主键
updateNote()
将基于该主键更新行。

Um,要更新注释,请调用
updateNote()
。除此之外,你所说的“检查、比较和更新现有行”是什么意思?@commonware我的意思是updateNote()如何知道要更新哪些注释?嗯,要更新注释,请调用
updateNote()
。除此之外,您所说的“检查、比较和更新现有行”是什么意思?@commonware我的意思是updateNote()如何知道要更新哪些注释?注释中唯一的主键是自动生成的ID。我想根据检查日期更新行。日期分为日期、日、月和年。我应该如何对照数据库中的数据进行检查?@waseefakhtar:“我在Notes中唯一的主键是自动生成的ID。我想根据检查日期更新行”——这就是
@update
将使用的内容。“我想根据检查日期更新行”--然后创建一个SQL
update
语句来表达您想要的内容,并在您的
@Dao
中的
@Query
-注释方法中使用该语句。虽然
@Query
通常用于
选择
,但我们也使用它来进行任何
更新
删除
,这将非常有效。但是,现在我有了@Insert和@Query,查询是
@Query(“更新注释集id=:id,notetTitle=:notetTitle,noteDescription=:noteDescription,其中date=:date和month=:month和year=:year”)public void updatenoteNoteNote(String noteTitle,String noteDescription,String date,String month,String year)。如何以及在何处检查是否应运行@Insert或@Query?在调用@Insert或@Query之前,我应该如何检查现有数据?@waseefakhtar:在任何情况下,我都无法想象这是一个问题。在一种情况下,您正在创建一个新实体。在另一种情况下,您正在修改数量未知的实体。这些操作是不可比较的。注释中唯一的主键是自动生成的ID。我想根据检查日期更新行。日期分为日期、日、月和年。我应该如何对照数据库中的数据进行检查?@waseefakhtar:“我在Notes中唯一的主键是自动生成的ID。我想根据检查日期更新行”——这就是
@update
将使用的内容。“我想根据检查日期更新行”--然后创建一个SQL
update
语句来表达您想要的内容,并在您的
@Dao
中的
@Query
-注释方法中使用该语句。虽然
@Query
通常用于
选择
,但我们也使用它来进行任何
更新
删除
,这将非常有效。但是,现在我有了@Insert和@Query,查询是
@Query(“更新注释集id=:id,notetTitle=:notetTitle,noteDescription=:noteDescription,其中date=:date和month=:month和year=:year”)public void updatenoteNoteNote(String noteTitle,String noteDescription,String date,String month,String year)。如何以及在何处检查是否应运行@Insert或@Query?在调用@Insert或@Query之前,我应该如何检查现有数据?@waseefakhtar:在任何情况下,我都无法想象这是一个问题。在一种情况下,您正在创建一个新实体。在另一种情况下,您正在修改数量未知的实体。这些业务不具有可比性。