2011-03-29 108 views
-1

如果用戶在該表上插入,更新和刪除,我需要Java中的示例程序來保留錶的歷史記錄。任何人都可以幫忙嗎?在java中保留錶的歷史記錄

在此先感謝。

+5

請添加更多信息!你在談論Swing JTable嗎? Web表(在這種情況下,哪個框架,JSF,Spring MVC,Struts ...) – romaintaz 2011-03-29 07:33:06

回答

0

好了,我們通常有我們自己的歷史記錄表,其(大部分)看起來像原始表。由於我們的大多數表格已經具有創建日期,修改日期和相應用戶,因此我們所需做的就是將數據集從實時表複製到歷史記錄表,創建日期爲now()

我們在使用Hibernate所以這可能在一個攔截器來完成,但可能有其他選擇,例如一些數據庫觸發執行腳本等

0

如何,這是一個Java的問題嗎?

這應該在數據庫部分移動。

你需要創建一個歷史表。然後創建原始表數據庫觸發器「創建或插入或更新之前更換觸發器或刪除表中的每一行......」

0

我認爲這可以通過建立在SQL服務器觸發器來實現。

語法: 你可以按如下創建觸發器

CREATE TRIGGER TRIGGER_NAME {BEFORE | AFTER} {INSERT |更新| DELETE} ON表名FOR EACH ROW triggered_statement

你必須創建2個觸發一個之前執行的操作,另外在手術後進行。否則它可以通過代碼來實現,但是在批處理的情況下代碼要處理有點乏味。

0

你應該嘗試使用觸發器。您可以有一個單獨的表格(您需要維護歷史記錄的表格的確切副本)。

此表將被通過觸發器每個插入/更新後更新您的主表/刪除。

然後你就可以編寫Java代碼從第二歷史表這些變化。

+0

因此,您已經從編寫Java代碼以獲取從一個表的更改到...編寫Java代碼以從另一個表中獲取更改? – 2011-03-29 07:38:25

+0

@Shakedown使用一張表格將難以跟蹤表格中所做的更改。如果您有歷史記錄表,您將知道在第一個表中進行的每次更改時表的狀態。然後你可以編寫你的java代碼來比較這些表並獲得差異。 – ashishjmeshram 2011-03-29 07:43:26

0

我想你可以用你的底層數據庫的重做日誌來跟蹤執行的操作。這個計劃有什麼特別的理由嗎?

0

你可以嘗試創建說,從表中的對象的列表(假設您對數據對象)。這將允許你遍歷列表並與表中的當前數據進行比較?您將能夠看到是否發生了任何變化。

你甚至可以創建一個包含枚舉,讓你的操作(DELETE,UPDATE,CREATE)與新的數據一起對象另一個列表。

以前沒有做過,只是一個想法。

0

像@Ashish提到的,可以使用觸發器插入到一個單獨的表中 - 這通常稱爲審覈跟蹤表審計日誌表

下面是通常在這樣的審計追蹤表中定義的列:'Action'(插入,更新,刪除),tablename(插入/刪除/更新的表),key(需要的表的主鍵)基準),時間戳(執行此操作的時間)

在整個事務完成後審計日誌會更好。否則,如果異常傳回代碼端,則需要單獨調用更新審計表。希望這可以幫助。

0

如果你正在談論數據庫表,你可以使用數據庫中的觸發器或在你的應用程序中添加一些額外的代碼 - 可能使用方面。如果您使用的是JPA,則可以使用實體監聽器或執行一些額外的邏輯,將某些方面添加到您的DAO對象,並將特定方面應用於所有需要維護歷史數據的實體上執行CRUD的DAO。如果你的DAO對象是無狀態bean,那麼你可以使用Interceptor來實現在其他情況下使用java代理功能,cglib或其他可能爲你提供方面功能的庫。如果您使用的是Spring而不是EJB,則可以在應用程序上下文配置文件中建議您的DAO。

0

您有這兩個選項:

  1. 讓數據庫處理這種自動使用觸發器。我不知道你使用的是什麼數據庫,但是它們都支持你可以使用的觸發器。
  2. 在您的程序中編寫插入,更新和刪除用戶時執行類似操作的代碼。

個人而言,我更喜歡第一個選項。它可能需要較少的維護。您可能會在多個地方更新用戶,所有這些地方都需要代碼來更新其他表。此外,在數據庫中,您可以有更多選項來指定所需的值和完整性約束。

0

當我將審計數據存儲在文件中時,觸發器不可用,否則我沒有使用數據庫...我的建議是創建表「AUDIT」並在servlet的幫助下編寫java代碼,並將數據存儲在文件中或DB或另一個DB也...

相關問題