QueryBuilder greenDao 的 Where 条件 android
Where condition on QueryBuilder greenDao android
我是 android 的新手,决定学习 greenDao ORM 并将其用于我的测试项目。
我正在创建一个用户列表 objects。每个用户项目可以有多个 child。所以我将 userId 保留在 child objects 中以便能够找到用户的 child.
每个 child 都有一个 phone 号码。这些 phone 个数字是唯一的。因此,当我想为用户插入 child 时,我应该检查 child 的 phone 号码不应存在于 table.
中
为此,我制作了一个 QueryBuilder,它从数据库中获取所有 child objects。QueryBuilder<Child> childQuery = childDao().queryBuilder()
.where(ChildeDao.Properties.UserId.eq(child.getUserId()));
这个用来获取所有children。现在,如果我想添加一个新的 child,我会得到它的 phoneNumber 并检查以下条件。如果此列表的大小等于零,则意味着我可以添加 child,但如果它大于零,则意味着此 child 存在:
childQuery.where(ChildDao.Properties.PhoneNumber.eq(phoneNumber)).list().size()
请注意,phone号码是新的 child phone号码。
但我的问题是,当我通过第一个查询获得 child List 时,它的大小为 10,这在我的情况下是完全正确的,然后当我通过第二个代码检查条件时,突然 child查询更改为一或零。 (取决于数据库中是否存在新的 child 的 phone 号码。)
这正是我写的:
QueryBuilder<Child> childQuery = childDao().queryBuilder()
.where(ChildeDao.Properties.UserId.eq(child.getUserId()));
for(int i = 0; i < newChildrenList.size(); i++)
{
String phoneNumber = newChildrenList.get(i).getPhoneNumber();
if(childQuery.where(ChildDao.Properties.PhoneNumber.eq(phoneNumber)).list().size()==0){
addChildToDB();
}
}
所以我的问题是我不知道上面的代码有什么问题。为什么 childQuery 受 where 条件的影响?我应该如何防止它的变化?
据我所知,greenDao 的功能是动态地向现有 QueryBuilder
添加条件 (Where())。
因此,当您检查 childQuery.where(ChildDao.Properties.PhoneNumber.eq(phoneNumber))
时,它会向原始查询添加条件。
防止它的一种方法是在循环内创建一个新变量:
for(...){
QueryBuilder<Child> child = childQuery;
if(child.where(ChildDao.Properties..PhoneNumber.eq(phoneNumber)).list().size()==0){
addChildToDB();
}
}
或者您也可以将 childQuery 放入其中:
if(childDao().queryBuilder()
.where(ChildeDao.Properties.UserId.eq(child.getUserId()),
ChildDao.Properties.PhoneNumber.eq(phoneNumber))
.list().size() == 0){
addChildToDB();
}
我是 android 的新手,决定学习 greenDao ORM 并将其用于我的测试项目。
我正在创建一个用户列表 objects。每个用户项目可以有多个 child。所以我将 userId 保留在 child objects 中以便能够找到用户的 child.
每个 child 都有一个 phone 号码。这些 phone 个数字是唯一的。因此,当我想为用户插入 child 时,我应该检查 child 的 phone 号码不应存在于 table.
中为此,我制作了一个 QueryBuilder,它从数据库中获取所有 child objects。QueryBuilder<Child> childQuery = childDao().queryBuilder()
.where(ChildeDao.Properties.UserId.eq(child.getUserId()));
这个用来获取所有children。现在,如果我想添加一个新的 child,我会得到它的 phoneNumber 并检查以下条件。如果此列表的大小等于零,则意味着我可以添加 child,但如果它大于零,则意味着此 child 存在:
childQuery.where(ChildDao.Properties.PhoneNumber.eq(phoneNumber)).list().size()
请注意,phone号码是新的 child phone号码。
但我的问题是,当我通过第一个查询获得 child List 时,它的大小为 10,这在我的情况下是完全正确的,然后当我通过第二个代码检查条件时,突然 child查询更改为一或零。 (取决于数据库中是否存在新的 child 的 phone 号码。) 这正是我写的:
QueryBuilder<Child> childQuery = childDao().queryBuilder()
.where(ChildeDao.Properties.UserId.eq(child.getUserId()));
for(int i = 0; i < newChildrenList.size(); i++)
{
String phoneNumber = newChildrenList.get(i).getPhoneNumber();
if(childQuery.where(ChildDao.Properties.PhoneNumber.eq(phoneNumber)).list().size()==0){
addChildToDB();
}
}
所以我的问题是我不知道上面的代码有什么问题。为什么 childQuery 受 where 条件的影响?我应该如何防止它的变化?
据我所知,greenDao 的功能是动态地向现有 QueryBuilder
添加条件 (Where())。
因此,当您检查 childQuery.where(ChildDao.Properties.PhoneNumber.eq(phoneNumber))
时,它会向原始查询添加条件。
防止它的一种方法是在循环内创建一个新变量:
for(...){
QueryBuilder<Child> child = childQuery;
if(child.where(ChildDao.Properties..PhoneNumber.eq(phoneNumber)).list().size()==0){
addChildToDB();
}
}
或者您也可以将 childQuery 放入其中:
if(childDao().queryBuilder()
.where(ChildeDao.Properties.UserId.eq(child.getUserId()),
ChildDao.Properties.PhoneNumber.eq(phoneNumber))
.list().size() == 0){
addChildToDB();
}