房间删除​​查询不会删除数据库中的行

时间:2017-11-15 16:44:08

标签: android android-room android-architecture-components

我使用@Query删除我的会议室数据库中的行,但我无法删除该记录。以下是@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();
}

实体类

@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

}

有人可以给我一个建议吗,我做错了什么?

4 个答案:

答案 0 :(得分:1)

您可以使用@Delete注释,Delete方法的所有参数必须是使用Entity或其集合/数组注释的类。

在你的情况下,我相信,你应该使用 @删除 int delete(注释)或

@Delete int delete(注意...注释)

答案 1 :(得分:1)

尝试以这种方式使用@Query。

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

在上面的代码行中,arg0是传递给函数delete()的第一个参数。

答案 2 :(得分:0)

使用这样的删除查询:

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

其中&#34; quote_no&#34;是数据库中要删除行的唯一值,&#34;订单&#34;是表名。

答案 3 :(得分:0)

对于我来说,我添加了错误的删除注释@DELETE,该注释是从改造中导入的,而不是从房间库中导入的@Delete。