QueryBuilder<Person> queryBuilder = this.queryBuilder();
WhereCondition whereCondition = Properties.Id.eq(10);
try {
// Following line fetches list of person with id 10, which has name BBBB.
List<Person> PersonsList = queryBuilder.where(whereCondition).list();
if(PersonsList != null && PersonsList.size() > 0){
Log.e("Fetched Person1--->", PersonsList.get(0).getName());
// To update record using query like this.
String updateQuery = "UPDATE PERSON SET NAME = 'AAAA' WHERE id = 10";
personDao.execSQL(updateQuery);
}
// Again fetching that person record list of id 10.
List<Person> PersonsList1 = queryBuilder.where(whereCondition).list();
if(PersonsList1 != null && PersonsList1.size() > 0){
// Here i am expecting result to be person name as AAAA
Log.e("Fetched Person2--->", PersonsList1.get(0).getName());
}
} catch (Exception e) {
e.printStackTrace();
}
新的更新名称不会反映在同一记录中。 这是使用dao获取记录并对其执行sql update操作时的代码。
或者在GreenDao中有什么办法,我们可以使用where条件更新记录。
答案 0 :(得分:3)
使用greendao的内置方法修改数据而不是原始SQL查询:
List<Person> PersonsList = queryBuilder.where(whereCondition).list();
if (PersonList != null) {
for (Person p : PersonList) {
p.setName("AAAA");
p.update();
}
}
<强>更新强>
如果要使用单个查询进行更新,可以使用查询。 可能greendao会缓存你的结果,因此在你的测试中第二次没有真正查询数据库。
使用它来清除会话缓存。
DaoSession.clear();
尽管如此,我不推荐这样的更新,因为它可能会比使用ORM方式对您的性能产生更大的影响,因为必须再次查询所有缓存的实体。
答案 1 :(得分:2)
Green DAO不支持更新。您需要使用实体进行更新。如果您直接在数据库中执行实体之外的内容,则可以刷新实体或清除会话。