我正在编写一个 Android 应用程序,只要给定的 SQLite 数据库发生更改(添加、删除或更新任何新行),就需要通知该应用程序。
是否有任何程序化方式来收听这些通知?
为每个表编写数据库触发器是唯一的方法吗?
我正在编写一个 Android 应用程序,只要给定的 SQLite 数据库发生更改(添加、删除或更新任何新行),就需要通知该应用程序。
是否有任何程序化方式来收听这些通知?
为每个表编写数据库触发器是唯一的方法吗?
SQLite provides Data Change Notification Callbacks. I don't think that Android exposes them directly but it does have for example CursorAdapter which provides some change notifications.
As thinksteep asked however, do you expect your DB to be changed outside the scope of your own application?
您可以注册一个观察者类,例如DataSetObserver
然后,每当您更改某些内容时,您都可以调用cursor.registerDataSetObserver(..)
以注册观察更改。
它没有很好的记录,但我确信那里有一些例子
您也可以使用getContentResolver().registerContentObserver,但遗憾的是它不会告诉您进行了何种更改,它可能是删除、插入或更新。
如果您控制与 DB 接口的 ContentProvider,那么您可以触发 Intent 或使用getContentResolver().notifyChange发送一个特殊的 Uri 通知,该通知标识表和操作。您可以通知的一个示例 Uri 可能是:content://my-authority/change/table-name/insert
但即便如此,您也不确切知道更改影响了哪些行。
似乎写入更改日志表的触发器将保证您听到所有更改,无论它们来自何处,并且您可以知道发生的确切 ID 和操作。不幸的是,这意味着插入/更新/删除速度较慢,这意味着您可能需要某种服务来处理和删除更改。
我很想知道这些是否是更好的解决方案!