在Android Studio中在会议室数据库中查询

时间:2018-07-25 22:46:52

标签: android database sqlite android-studio android-room

我在会议室数据库中有一个笔记列表。我想根据某些特征选择特定注释的列表。对于这个建议,我将第二个字段note_second_id添加到PrimaryKey:

 @PrimaryKey(autoGenerate = true)
        private long note_id;  
        private long note_second_id;

然后创建下一个查询:

@Query("SELECT * FROM " + Constants.TABLE_NAME_NOTE + " WHERE  note_second_id = :second_id ")
    List<Note> getNotes(long second_id);

我想添加新笔记时使用:

          long j = activityReference.get().dataBase.getNoteDao().insertNote(note);
          deck.setNote_id(j);
          deck.setNote_second_id(note000);

.setNote_id()和setNote_second_id()方法的外观如下:

 public void setNote_id(long deck_id) {this.note_id = note_id; }    
 public void setNote_second_id(long notesecondid) {    
 this.note_second_id = notesecondid; }

并且note000是一个常数:

Long note000 = 11111L;

在活动中,我希望显示以下列表:

 private class RetrieveTaskDeck extends AsyncTask<Void,Void,List<Deck>> {
         private WeakReference<MainActivity> activityReference;
         // only retain a weak reference to the activity
       RetrieveTaskDeck(MainActivity context) {
           activityReference = new WeakReference<>(context);        }

       @Override
        protected List<Note> doInBackground(Void... voids) {
           if (activityReference.get()!=null)                
                return  activityReference.get().dataBase.getNotesDao().getNotes(note000); 
            else
                return null;     }

       @Override
        protected void onPostExecute(List<Note> notes) {
            if (notes !=null && notes.size()>0 ){
                activityReference.get().notes.clear();
                activityReference.get().notes.addAll(notes);
                // hides empty text view 
           activityReference.get().textViewMsgDeck.setVisibility(View.GONE);
            activityReference.get().decksAdapter.notifyDataSetChanged();   }   }  }

问题是这种方式不起作用。它不显示任何注释。仅当我使用查询时:

   @Query("SELECT * FROM " + Constants.TABLE_NAME_NOTE)
        List<Note> getAllNotes();

activityReference.get().dataBase.getNotesDao().getAllNotes();

只有这样,我才能获得所有笔记的列表。但是我只需要显示一些特殊标记的注释。

出什么问题了,我该怎么办?查询似乎出了点问题...也许有人在处理房间数据和查询方面有经验,可能会提供一些建议...

1 个答案:

答案 0 :(得分:0)

实际上,我已经解决了这个问题。这是一个解决方案。 我使用了下一个查询:

@Query("SELECT * FROM " + Constants.TABLE_NAME_NOTE + " where note_content LIKE :second_id ")
List<Note> getNotes(String second_id);

其中“ note_content”是列名,“ second_id”是第一行,写在列名之后:

@ColumnInfo(name = "note_content")
private String second_id; 

请注意,如果我在声明该列之后的第一个String值(第二个或第三个)之后的某个位置写String second_id,则它不会通过该单词进行搜索。但是通过这种方式,上面已经写好了。

因此,我可以根据任务动态设置该列的String值“ second_id”,并且用户不需要知道它甚至存在。我尝试使用PrimaryKey中的ID来解决相同的任务,但是没有用。实际上,在Column中使用String值是可行的。希望它会帮助某人。另外,如果有人知道如何使用PrimaryKey中的ID解决相同的任务,请让我知道在此处编写解决方案。