Android 如何从 ORMLITE 中删除记录?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12108195/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 09:45:08  来源:igfitidea点击:

how to delete a record from ORMLITE?

androidormlite

提问by Sourabh Saldi

I need to delete a record from ORMLite Database I can delete a record by id using as below

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

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

but what if I have to delete a record from same table not by id but by name or any other field I want something like

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

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

what query should i write using querybuilder to delete a record where name = name and mealtype = say (lunch)

我应该使用 querybuilder 编写什么查询来删除名称 = 名称和膳食类型 = 说(午餐)的记录

I tried something like this in my databasehelper class

我在我的 databasehelper 类中尝试过这样的事情

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) {
        ...
    }
}

回答by Ilya Demidov

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

Update:

更新:

For example :

例如 :

//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();

Good luck!

祝你好运!

回答by cjk

To save building a query, you can do a select to find the ID, then do a delete by ID. Thsi will be straightforward if you already have the select query set up for this table.

要保存构建查询,您可以选择查找 ID,然后按 ID 删除。如果您已经为该表设置了选择查询,则此操作将很简单。

回答by Airon Tark

It can be done also like that

也可以这样做

DatabaseHelper.getInstance().getDao(YourObject.class).delete(yourObjectInstance);

回答by David Rawson

If you are using Kotlin, you will need to do something like this instead since the type inference is not currently working correctly for the fluent syntax:

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

val deleteBuilder = dao.deleteBuilder()
            val where = deleteBuilder.where().eq("address", address)
            deleteBuilder.setWhere(where)
            deleteBuilder.delete()

回答by AmiNadimi

If you already have an instance of the object (or object list) you want to delete, just do :

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

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

If you don't have the instance to delete or you want to do it SQL way(!):

如果您没有要删除的实例,或者您想以 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();

If you need a more complicated Wherelogic, then use deleteBuilder.where().or()or deleteBuilder.where().and()to add more constraints.

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