как удалить запись из ORMLITE?

Мне нужно удалить запись из базы данных ORMLite. Я могу удалить запись по идентификатору, как показано ниже.

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

но что, если мне нужно удалить запись из той же таблицы не по идентификатору, а по имени или любому другому полю, я хочу что-то вроде

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

какой запрос я должен написать с помощью конструктора запросов, чтобы удалить запись, где имя = имя и тип еды = сказать (обед)

Я пробовал что-то подобное в своем классе 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) {
        ...
    }
}

person Sourabh Saldi    schedule 24.08.2012    source источник


Ответы (5)


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

Удачи!

person Ilya Demidov    schedule 24.08.2012
comment
@llya Demidove не могли бы вы уточнить реализацию, как это должно быть - person Sourabh Saldi; 24.08.2012

Чтобы сохранить создание запроса, вы можете выбрать, чтобы найти идентификатор, а затем выполнить удаление по идентификатору. Это будет просто, если у вас уже настроен запрос выбора для этой таблицы.

person cjk    schedule 24.08.2012
comment
У меня снова нет запроса выбора для этой таблицы, сначала мне придется построить запрос выбора, не так ли? - person Sourabh Saldi; 24.08.2012

Можно и так

DatabaseHelper.getInstance().getDao(YourObject.class).delete(yourObjectInstance);
person Airon Tark    schedule 19.04.2016

Если вы используете Kotlin, вам нужно будет сделать что-то подобное вместо этого, поскольку вывод типа в настоящее время не работает правильно для свободного синтаксиса:

val deleteBuilder = dao.deleteBuilder()
            val where = deleteBuilder.where().eq("address", address)
            deleteBuilder.setWhere(where)
            deleteBuilder.delete()
person David Rawson    schedule 12.02.2018

Если у вас уже есть экземпляр объекта (или списка объектов), который вы хотите удалить, просто выполните:

//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() или deleteBuilder.where().and(), чтобы добавить больше ограничений.

person AmiNadimi    schedule 24.04.2018