26

我需要从 ORMLite 数据库中删除一条记录我可以使用以下方式按 id 删除一条记录

@Override
public void Delete(int id) throws SQLException {
    this.dao.deleteById(id);
}

但是如果我必须从同一个表中删除一条记录而不是按 id 而是按名称或我想要的任何其他字段怎么办

public void Deletefromcanteen(String name,MealType mealtype) {
    this.dao.deletebyName(name);
}

我应该使用 querybuilder 编写什么查询来删除 name = name 和 mealtype = say (lunch) 的记录

我在我的数据库助手类中尝试过这样的事情

public  void deletefromcanteen(int id, String mealtype) {
    try {
        Dao<CanteenLog, Integer> canteenDao = getCanteen();
        DeleteBuilder<CanteenLog, Integer> deleteBuilder = canteenDao
                .deleteBuilder();
        deleteBuilder.where().eq("user_id", id).and().eq("meal", mealtype);
        canteenDao.delete(deleteBuilder.prepare());
    } catch (Exception e) {
        ...
    }
}
4

5 回答 5

74
deleteBuilder.where().eq("FIELD_NAME", arg);
deleteBuilder.delete();

更新:

例如 :

//Get helper
DatabaseHelper helper = OpenHelperManager.getHelper(App.getContext(), DatabaseHelper.class);

//get dao
Dao dao = helper.getDao(YOUR_CLASS.class);

//delete elements from table in field by arg
DeleteBuilder<CanteenLog, Integer> deleteBuilder = dao.deleteBuilder();
deleteBuilder.where().eq("FIELD_NAME", arg);
deleteBuilder.delete();

祝你好运!

于 2012-08-24T11:14:17.210 回答
0

为了节省构建查询,您可以执行选择以查找 ID,然后按 ID 执行删除。如果您已经为此表设置了选择查询,这将很简单。

于 2012-08-24T11:11:30.827 回答
0

也可以这样

DatabaseHelper.getInstance().getDao(YourObject.class).delete(yourObjectInstance);
于 2016-04-19T03:57:37.533 回答
0

如果您使用的是 Kotlin,则需要执行类似的操作,因为类型推断当前对于流式语法无法正常工作:

val deleteBuilder = dao.deleteBuilder()
            val where = deleteBuilder.where().eq("address", address)
            deleteBuilder.setWhere(where)
            deleteBuilder.delete()
于 2018-02-12T21:54:39.883 回答
0

如果您已经有要删除的对象(或对象列表)的实例,只需执行以下操作:

//Get helper
DatabaseHelper helper = 
    OpenHelperManager.getHelper(App.getContext(), DatabaseHelper.class);
// delete 'em !
helper.getDao(YourObject.class).delete(yourObjectInstance);

如果您没有要删除的实例,或者您想使用 SQL 方式(!):

//Get helper
DatabaseHelper helper = 
    OpenHelperManager.getHelper(App.getContext(), DatabaseHelper.class);

//get dao
Dao dao = helper.getDao(YOUR_CLASS.class);

//delete elements from table in field by arg
DeleteBuilder<CanteenLog, Integer> deleteBuilder = dao.deleteBuilder();
deleteBuilder.where().eq("FIELD_NAME", "FIELD_VALUE");
deleteBuilder.delete();

如果您需要更复杂的Where逻辑,则使用deleteBuilder.where().or()ordeleteBuilder.where().and()添加更多约束。

于 2018-04-24T06:38:50.490 回答