2010-07-09 62 views
0

有獨立運行的用Java開發兩個不同的過程, 如果任何進程的modifyies表,我可以得到任何暗示?隨着表格的修改。我的目標是我想要一個對象始終與數據庫中的表同步,如果在表上發生任何修改我想修改對象。 如果表被修改,我可以得到任何關於這個的暗示?數據庫提供這樣的設施嗎?辦法知道表被修改

+0

「修改」是什麼意思?你在談論使用DDL(alter table)修改實際的表定義,還是僅僅使用DML修改行數據(插入/更新/刪除)? – 2010-07-09 14:07:38

回答

1

不,數據庫不提供這些服務。您必須定期查詢以檢查修改。或者使用一些JMS解決方案將通知從一個應用程序發送到另一個。

3

我們使用SQL Server和有一定的觸發火警當一個表被修改和調用外部的二進制文件。我們調用的二進制文件發送Tib會合消息來通知其他應用程序該表已更新。

不過,我不是這個解決方案的一個巨大的風扇 - 好多了通過一個「託管」過程控制寫入你的表,並有其他的應用代表了這一點。爲了執行此操作,您可以更改您的表的權限,以便只有您的託管進程可以寫入數據庫。

這種方法的另一個好處是能夠在您的託管過程中提供了一個緩存層,以滿足公共接入模式。當然,DBMS無論如何執行緩存,但通過在應用程序層提供緩存,您將擁有更多的控制/可視性。

0
  • 您可以將時間戳列(last_modified)添加到表中,並定期檢查更新或序列號(它們在概念上類似於樂觀鎖定的更新時遞增)。
  • 您可以使用提供更新機制的jboss cache
+0

您必須創建一個單獨的表來跟蹤修改 - 表中的列本身無法跟蹤是否存在刪除 – Joe 2010-07-09 10:12:52

0

的一種方式,你可以做到這一點:只需附上數據庫語句中應返回'true'當成功地完成的方法。在代碼中維護標誌的範圍,以便每當你想檢查表是否被修改時。你爲什麼不嘗試這樣?

0

如果你願意接受黑客的做法,和你的數據庫存儲表的文件(例如,MySQL的),你總是可以擁有的東西,可以檢查磁盤上的文件的修改時間,看看是否它改變了。

當然,如Oracle數據庫,其中的表被分配到表空間和表空間是什麼在磁盤上存儲將無法正常工作。

(是的,我知道這是一個不好的方法,這就是爲什麼我說這是一個黑客 - 但我們不知道所有的要求,如果他需要快速,而不重寫整個應用程序,這將在技術上適用於某些數據庫)

相關問題