2013-03-07 34 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和操作。不幸的是,它意味着更慢的插入/更新/刪除,這意味着您可能需要某種服務來處理和刪除更改。

我很想聽聽這些是否有更好的解決方案!