会议室数据库在插入之前检查条件

时间:2020-05-15 16:27:51

标签: android android-sqlite android-room

我必须在一小时内为一个特定的ID在表1中插入一个值。我知道可以通过SQLite触发器来实现,但是我在其他地方看到Room数据库当前不支持SQLite触发器功能。 如何完成以上任务?我在这里包括了我的数据模型。

    @Entity(tableName = "device_table")
    public class Device {

    @PrimaryKey (autoGenerate = true)
    private int id;
    private String userId;
    private long time;


        public Device(String userId) {
             this.userId = userId;    

        }
      // and rest of the getter setter methods
    }

1 个答案:

答案 0 :(得分:0)

我认为您不需要那里的SQLite触发器(如果行的更新不依赖于插入/删除另一行)。您可以将任务分为2个子任务:

  1. 如何创建函数,该函数使用某些ID更新Sqlite中的行。
  2. Android中每小时如何调用一次此功能。

对于第一个子任务,决定取决于您如何更新数据。 这里最简单的决定-在带有@Insert批注的DAO接口方法中使用:

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertDevice(device: Device)

您应该将数据类Device的“更新”实例放入此方法。 “ OnConflictStrategy.REPLACE”表示如果存在带有此“ id”的行,则该行将被覆盖,否则-将被添加。

对于第二个子任务,您可以使用一种机制-处理程序,执行程序,计时器,AlarmManager,WorkManager(即使您的应用程序处于非活动状态,它们也可以正常工作)。在SO上有许多使用它们的答案/示例。