GreenDao是否通过执行sql更新表记录来更新tableDao的数据库会话

时间:2014-05-06 07:13:21

标签: java android orm greendao

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条件更新记录。

2 个答案:

答案 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不支持更新。您需要使用实体进行更新。如果您直接在数据库中执行实体之外的内容,则可以刷新实体或清除会话。