web-dev-qa-db-fra.com

La requête de suppression de pièce ne supprime pas la ligne dans la base de données

J'utilise @Query pour supprimer une ligne dans ma base de données de salle, mais je ne peux pas supprimer l'enregistrement. Voici ma requête de @Dao

@Dao
public interface NoteDao {

    @Insert
    void insert(final Note note);

    @Update
    void update(final Note note);

    @Query("DELETE FROM notes WHERE uid = :noteId")
    int delete(final int noteId);

    @Query("SELECT * FROM notes")
    LiveData<List<Note>> selectAll();
}

Classe d'entité

@Entity(tableName = "notes")
public class Note {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    @Expose(serialize = false, deserialize = false)
    private int mId;
    @ColumnInfo(name = "uid")
    @SerializedName("id")
    private int mUid;
    @ColumnInfo(name = "text")
    @SerializedName("text")
    private String mText;

    public Note() {
    }

    getters and setters ommited

}

Quelqu'un peut-il me donner un conseil, ce que je fais mal?

5
Martin

Vous pouvez utiliser l'annotation @Delete et tous les paramètres de la méthode Delete doivent être des classes annotées avec Entity ou des collections/tableaux de celle-ci.

Dans votre cas, je pense que vous devriez utiliser @ Deleteint delete (Note note) ou 

@Delete Int delete (Note ... note)

1
user2612398

Utilisez la requête de suppression comme ceci:

@Query("Delete FROM Orders where quote_no LIKE  :quote_no")
void deleteOrderById(String quote_no);

où "quote_no" est la valeur unique de la base de données avec laquelle vous voulez supprimer la ligne et "Orders" le nom de la table. 

0
Deepak Rana

Essayez d’utiliser @Query de cette façon.

 @Query("DELETE FROM notes WHERE uid = :arg0")
 int delete(final int noteId);

Dans le code de lignes ci-dessus, arg0 est le premier argument transmis à la fonction delete ().

0
hetsgandhi