我正在使用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));
}
});
}
答案 0 :(得分:0)
Notification类中的所有条目都应该是公开的,甚至没有受保护,而是公开的。