我在这里问过类似的问题,但没有得到任何满意的答复,所以请理解我的担忧:
1. https://stackoverflow.com/questions/14846105/insert-ot-update-using-one-of-the-field-as-key-in-greendao
2. https://stackoverflow.com/questions/14547288/best-way-to-select-row-with-following-scenario-using-greendao
我在服务器和客户端上都有一个名为"TARGET"的表
这里的服务器是MySql,客户端是Android。
我想在客户端部分使用greendao,我有多个任务要做,如下所示:
- 具有Employee_ID的员工将在特定日期后从服务器获取所有目标,现在在客户端部分,如果存在TARGET,则应更新它,否则插入它。这是insertOrUpdate案例
- 使用target_ID删除特定目标
- 使用TARGET_NAME获取TARGET的列表
关于问题的数据:
TABLE : TARGET
FIELDS: TARGET_ID
TARGET_NAME
EMPLOYEE_ID
在DaoExampleGenerator中使用以下代码:
使用greenDao选择具有以下场景的行的最佳方式?
private static void addTarget(Schema schema){
Entity target = schema.addEntity("TARGET");
target.addStringProperty("TARGET_ID").primaryKey().autoincrement();
target.addStringProperty("TARGET_NAME");
target.addStringProperty("EMPLOYEE_ID");
}
以下是我为我发布的问题所做的:
1. tDao.insertOrReplaceInTx(tArrayList);
where, tArrayList is ArrayList of TARGET Object.
2. for deleting a target using TARGET_ID, i load all the targets in
ArrayList<TARGET> then check TARGET_ID of each TARGET object. If
the TARGET_ID matches then i use, **tDao.delete(t);**
3. for this also i do the same as (2), i load all the targets then match
the TARGET_NAME, If it matches then i add it to list.
任何人都可以告诉我实现上述问题陈述的最佳方法吗。使用greendao?
您应该能够构建一个删除查询。正如绿岛医生所说:
删除查询
批量删除不会删除单个实体,而是删除所有实体符合某些标准。要执行批量删除,请创建QueryBuilder,调用其buildDelete方法,并执行返回的DeleteQuery。API的这一部分可能在未来发生变化,例如。可以添加方便的方法等。请记住,批量删除当前不影响身份范围内的实体,例如,您可以"恢复"已删除的实体(如果它们以前已缓存)通过其ID(加载方法)访问。考虑清除身份范围,如果这可能会导致您的用例出现问题。
你现在所做的似乎是你问题的唯一答案。。。据我所知,在greenDao中没有一种方法可以按条件获取行或按条件删除单行。。。只能通过ID(长)。。。