我正在学习SQL
和Room
。我已成功查询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;)
我已经在寻找解决方案,但是我是Room
和SQL
的新手,所以我想在这里需要一点帮助:)
答案 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);