使用房间数据库(房间持久性库)创建触发器

Vis*_*hal 9 database sqlite android android-room

如何使用Room Persistence库" 创建触发器 "

CREATE TRIGGER  IF NOT EXISTS delete_till_10 INSERT ON user WHEN (select count(*) from user)>9

BEGIN 

    DELETE FROM user WHERE id IN  (SELECT id FROM user ORDER BY id limit (select count(*) -9 from user));

END
Run Code Online (Sandbox Code Playgroud)

Com*_*are 13

打电话getOpenHelper()给你RoomDatabase.这给你一个SupportSQLiteOpenHelperAPI,让人想起它SQLiteOpenHelper.在那里,调用getWritableDatabase()get a SupportSQLiteDatabase,并在那里execSQL()用来执行你的SQL语句.A RoomDatabase.Callback是执行此类SQL的一个地方,正如AdamMc331在此Kotlin片段中所示.

IOW,Room对这种情况没有任何帮助,但是对于像这样的情况,你总是可以使用低级数据库API.

  • @ AdamMc331:我不知道如何为初始创建数据库进行迁移.因此,虽然您需要使用迁移来更新现有应用程序,但您需要在其他位置执行此操作以进行初始创建.这可能是一个用例[对于`RoomDatabase.Callback`](https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.Callback.html); 你会在`onCreate()`中创建触发器.你在`RoomDatabase.Builder`上通过`addCallbacks()`附加一个`Callback`. (2认同)
  • @CommonsWare谢谢,这正是我所需要的.我刚刚测试了一下,看起来很棒.我已经把相关的代码放在任何可能偶然发现这个问题的人的头上,随便把它添加到你的答案中 - https://gist.github.com/AdamMc331/5d48220875ce6b8bf0a0c0396ec8a0c0 (2认同)