Android Room-RawQuery无法在数据库中更新/插入数据

时间:2019-08-26 08:25:05

标签: android android-sqlite android-room

我正在使用1.1.1版的会议室库进行数据库操作。我成功地在房间中创建了一个表,但是无法在其中插入/更新数据。游标执行原始查询后给我0值,但是我看不到数据库中的数据。

在执行代码室时,即使没有给我一个例外,但是当我执行简单的插入查询时,它仍然可以正常工作。

查询只是说如果我们在 Notifications 表中有 chatDialogId ,然后更新消息计数,或者如果不可用,则只需添加一个新的Raw消息计数为1。

预先感谢

实体类

@Entity(tableName = "Notifications")
public class Notifications {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    private long id;

    @ColumnInfo(name = "chatDialogId")
    private String chatDialogId;


    @ColumnInfo(name = "messageCount")
    private int messageCount;

    public Notifications() {
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getChatDialogId() {
        return chatDialogId;
    }

    public void setChatDialogId(String chatDialogId) {
        this.chatDialogId = chatDialogId;
    }


    public int getMessageCount() {
        return messageCount;
    }

    public void setMessageCount(int messageCount) {
        this.messageCount = messageCount;
    }

}

Dao

@Dao
public interface SMDatabaseDao {

    @RawQuery
    public long insertUpdateNotificationCount(SupportSQLiteQuery query);
}

在收到消息时从 FCMIntentService 调用以下方法。

public Long insertUpdateNotificationCount(final String id) {
    return runInTransaction(new Callable<Long>() {
        @Override
        public Long call() throws Exception {
            String customQuery = "UPDATE Notifications SET messageCount=messageCount+1 WHERE chatDialogId='" + id + "' AND EXISTS ( SELECT 1 FROM Notifications WHERE chatDialogId='" + id + "'); " +
                    "INSERT into Notifications(chatDialogId,messageCount) SELECT '" + id + "', 1 WHERE not EXISTS ( SELECT 1 FROM Notifications WHERE chatDialogId='" + id + "');";

            return smDatabaseDao().insertUpdateNotificationCount(new SimpleSQLiteQuery(customQuery));


        }
    });
}

1 个答案:

答案 0 :(得分:0)

Notification类中的所有条目都应该是公开的,甚至没有受保护,而是公开的。