2013-03-07 36 views
2

我想注册的回调方法使用SQLite触发 例如Java方法,调用从SQLite触发器(机器人)

public void printLog(){ 
Log.i("TAG","1 row added"); 
} 

这个方法调用后插入任何行源码。

可能吗?

如何做到这一点?

+0

为什么不把这个调用放在代码下面,无论你插入一条记录?为什么要通过'trigger'调用'call'? – SudoRahul 2013-03-07 10:29:07

+0

这只是一个例子。我想更改sqlite dbs后通知。 – user2143779 2013-03-07 10:30:30

+0

为什么你不检查数据库插入API的返回值?它会返回新插入行的行ID,如果发生错误,则返回-1。 – 2013-03-07 10:34:43

回答

1

的SQLite提供Data Change Notification Callbacks。我不认为Android直接暴露他们,但它确实有CursorAdapter,它提供了一些更改通知。

您也可以使用getContentResolver().registerContentObserver,但不幸的是,它不会告诉您进行了哪种更改,可能是删除,插入或更新。

如果您控制与数据库接口的ContentProvider,那么您可以触发一个意图或使用getContentResolver().notifyChange发送一个特殊的Uri通知来标识表和动作。你可以通知的一个例子是:content:// my-authority/change/table-name/insert

但是即使这样,你也不知道确切的哪些行受到改变的影响。

似乎触发器写入更改日志表可以保证您听到所有更改,而不管它们来自何处,并且您可以知道发生的确切ID和操作。不幸的是,它意味着更慢的插入/更新/删除,这意味着您可能需要某种服务来处理和删除更改。

我很想听听这些是否有更好的解决方案!