web-dev-qa-db-fra.com

comment supprimer un enregistrement d'ORMLITE?

Je dois supprimer un enregistrement de la base de données ORMLite. Je peux supprimer un enregistrement par ID en utilisant les options ci-dessous.

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

mais que se passe-t-il si je dois supprimer un enregistrement de la même table, pas par son identifiant mais par son nom ou par tout autre champ. 

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

quelle requête dois-je écrire en utilisant querybuilder pour supprimer un enregistrement où nom = nom et type de repas = dire (déjeuner)

J'ai essayé quelque chose comme ça dans ma classe 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) {
        ...
    }
}
25
Android Fanatic
deleteBuilder.where().eq("FIELD_NAME", arg);
deleteBuilder.delete();

Mettre à jour:

Par exemple :

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

Bonne chance!

72
Ilya Demidov

Si vous utilisez Kotlin, vous devrez procéder de la sorte, car l'inférence de type ne fonctionne pas correctement pour la syntaxe courante: 

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

Cela peut être fait aussi comme ça

DatabaseHelper.getInstance().getDao(YourObject.class).delete(yourObjectInstance);
0
Pavel Ismailov

Si vous avez déjà une instance de l'objet (ou de la liste d'objets) que vous souhaitez supprimer, procédez comme suit:

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

Si vous n'avez pas l'instance à supprimer ou si vous voulez le faire de manière 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();

Si vous avez besoin d'une logique Where plus compliquée, utilisez deleteBuilder.where().or() ou deleteBuilder.where().and() pour ajouter davantage de contraintes.

0
AmiNadimi

Pour sauvegarder la construction d'une requête, vous pouvez effectuer une sélection pour trouver l'ID, puis effectuer une suppression par ID. Cela sera simple si vous avez déjà configuré la requête de sélection pour cette table.

0
cjk