2017-12-05 14 views
0

特定の日付のノートが既に存在する場合、ノートを更新するための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()); 
     } 
}); 

を今、私は、データベース内の既存の行を、比較チェックし、更新するのか分かりません。

+0

um、ノートを更新するには、 'updateNote()'を呼び出します。それを超えて、「既存の行の確認、比較、更新」はどういう意味ですか? – CommonsWare

+0

@CommonsWare私はupdateNote()が更新するノートをどのように知っているのでしょうか? – waseefakhtar

答えて

1

Note@Entityクラスには主キーがあります。 updateNote()は、その主キーに基づいて行を更新します。

+0

私がメモに持つ唯一の主キーは、自動生成されたIDです。私は日付をチェックすることに基づいて行を更新したい。日付は、日付、日、月、年に分割されます。どのようにそれらをデータベースのものと照らし合わせてチェックすべきですか? – waseefakhtar

+0

@waseefakhtar:「ノート内にある唯一の主キーは、自動生成されたIDです。チェック日に基づいて行を更新したいのです。つまり、@ Updateが使用するものです。 「日付のチェックに基づいて行を更新したい」 - そして、あなたが望むものを表現するSQLの 'UPDATE'ステートメントを作成し、' @Dao'の '@ Query'-annotatedメソッドでそれを使用します。 '@ Query'は典型的には' SELECT'のために使用されますが、主キー以外の手段である 'UPDATE'や' DELETE'にも使用されます。 – CommonsWare

+0

それはうまくいくでしょう。しかし、今は@Insertと@Queryを持っています。クエリは '@Query(UPDATE notes SET ID =:id、noteTitle =:noteTitle、noteDescription =:noteDescription WHERE date =:date and month =:month and year = year ") パブリックvoid updateNote(String noteTitle、String noteDescription、String date、String month、String year);'。 @Insertまたは@Queryを実行する必要があるかどうか、どこでどのようにチェックするのですか? @Insertまたは@Queryを呼び出す前に、既存のデータを確認する方法を教えてください。 – waseefakhtar

関連する問題