我正在编写一个Android应用程序,只要给定的SQLite数据库发生更改(任何新行添加,删除或更新),都需要通知它。Android SQLite数据库通知
是否有任何编程方式来收听这些通知?
是否为每个表编写DB触发器的唯一方法?
我正在编写一个Android应用程序,只要给定的SQLite数据库发生更改(任何新行添加,删除或更新),都需要通知它。Android SQLite数据库通知
是否有任何编程方式来收听这些通知?
是否为每个表编写DB触发器的唯一方法?
SQLite提供了Data Change Notification Callbacks。我不认为Android会直接公开它们,但它确实有例如CursorAdapter,它提供了一些更改通知。
但是,thinksteep问,你是否期望你的数据库在你自己的应用程序范围之外被改变?
然而,正如thinksteep所问,你是否期望你的DB在你自己的应用程序范围之外被改变?非常有用的通知 – 2012-12-28 15:24:01
CursorAdapter提供了哪些更改通知? – 2014-09-28 06:45:32
CursorAdapter的通知基于Android的东西,这些东西直接与数据库更改无关。程序员在数据库更改时通知该机制。 – 2018-02-21 15:58:24
每当你改变一些东西,你可以打电话cursor.registerDataSetObserver(..)
注册观察变化,您可以注册一个观察者类如DataSetObserver
然后。
这不是有据可查的,但我敢肯定,有一些例子在那里
据我所知,游标提供了数据的快照。这意味着除非您重新查询数据,否则侦听器将不会被调用。从文档:“*注册一个观察者,当这个游标数据集的内容发生变化时调用,例如,当通过调用(),deactivate()或close()。*更改数据集时, – 2014-09-28 06:19:27
这会在程序员调用内容provider.notifyChange时触发,并且不会自动检测到更改。 – 2018-02-21 16:00:00
您可以使用也使用getContentResolver().registerContentObserver但不幸的是它不会告诉你什么样的变化作出,也可以是删除,插入或更新。
如果您控制与数据库接口的ContentProvider,那么您可以触发一个意图或使用getContentResolver().notifyChange发送一个特殊的Uri通知来标识表和动作。你可以通过的一个例子Uri可能是:content://my-authority/change/table-name/insert
但即使这样,你也不知道确切的哪些行受到变化的影响。
似乎触发器写入更改日志表可以保证您听到所有更改,而不管它们来自何处,并且您可以知道发生的确切ID和操作。不幸的是,它意味着更慢的插入/更新/删除,这意味着您可能需要某种服务来处理和删除更改。
我很想听听这些是否有更好的解决方案!
SQLLite数据库操作仅适用于您的应用程序(或)可能来自任何地方? – kosa 2012-01-09 05:17:54