如何查询用户输入?

时间:2019-01-28 07:47:14

标签: java android android-room

我正在学习SQLRoom。我已成功查询Room中的所有数据:

@Query( "SELECT * FROM my_table" )
LiveData<List<MyRoomEntity>>getAllData();

我还指定了对name列的搜索:

@Query( "SELECT id, name FROM my_table" )
LiveData<List<MyRoomEntity>>getAllNames();

下一步是查询用户输入。假设用户要在数据库中搜索Bob。查询看起来像什么?显然,查询应该是动态的,并且查询userInput,而不是具体的Bob;)

我已经在寻找解决方案,但是我是RoomSQL的新手,所以我想在这里需要一点帮助:)

1 个答案:

答案 0 :(得分:0)

使用:input并确保包括这样的参数:

@Query("SELECT * FROM my_table WHERE name = :input" )
LiveData<List<MyRoomEntity>>getUserInputName(String input);

然后在Repository中:

public LiveData<List<MyRoomEntity>> getUserInputName(String inputName) {
    return this.roomDao.getUserInputName(inputName);
}

ViewModel中:

public void getUserInputName(String inputName) {
    repository.getUserInputName(inputName).observe( mOwner, new android.arch.lifecycle.Observer<List<MyRoomEntity>>() {
        @Override
        public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {
            if(myRoomEntities != null) {
                for(MyRoomEntity item: myRoomEntities) {
                    Log.d("TAG ROOM ", "Input Name: " + item.toString());
                }
            }
        }
    } );
}

只需传递参数和参数。最后,当您在MainActivity()中调用方法时:

private String input = "Joe";
myViewModel.getUserInputName(input);