2011-03-29 109 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也...

相关问题