用java保存表的历史记录

用java保存表的历史记录,java,audit-trail,Java,Audit Trail,我需要Java中的示例程序,以便在用户插入、更新和删除该表时保存该表的历史记录。有人能帮忙吗 提前感谢。嗯,我们通常有自己的历史记录表,这些表大部分看起来像原始表。因为我们的大多数表已经有了创建日期、修改日期和相应的用户,所以我们需要做的就是将数据集从活动表复制到创建日期为now的历史表中 我们正在使用Hibernate,因此这可以在拦截器中完成,但也可能有其他选项,例如一些数据库触发器执行脚本等。这是一个Java问题吗 这应该在数据库部分中移动 您需要创建一个历史记录表。然后在原始表上创建数据

我需要Java中的示例程序,以便在用户插入、更新和删除该表时保存该表的历史记录。有人能帮忙吗


提前感谢。

嗯,我们通常有自己的历史记录表,这些表大部分看起来像原始表。因为我们的大多数表已经有了创建日期、修改日期和相应的用户,所以我们需要做的就是将数据集从活动表复制到创建日期为now的历史表中


我们正在使用Hibernate,因此这可以在拦截器中完成,但也可能有其他选项,例如一些数据库触发器执行脚本等。

这是一个Java问题吗

这应该在数据库部分中移动


您需要创建一个历史记录表。然后在原始表上创建数据库触发器,以便在插入、更新或删除表中的每一行之前创建或替换触发器……

我认为这可以通过在sql server中创建触发器来实现。 您可以按如下方式创建触发器:

语法:

创建触发器名称 {前|后}{插入|更新| 删除每行的表_名称上的} 触发式语句

您必须创建两个触发器,一个在执行操作之前,另一个在执行操作之后。
否则,它也可以通过代码实现,但在批处理过程中,代码处理会有点繁琐

您应该尝试使用触发器。您可以拥有一个单独的表,该表与您需要维护其历史记录的表完全相同

在主表上的每次插入/更新/删除之后,触发器将更新此表


然后您可以编写java代码,从第二个历史记录表中获取这些更改。

我认为您可以使用基础数据库的重做日志来跟踪执行的操作。有什么特别的原因需要使用该程序吗?

您可以尝试从表中创建一个对象列表,假设您有数据对象。这将允许您循环浏览列表并与表中的当前数据进行比较?然后,您将能够看到是否发生了任何更改

您甚至可以使用包含枚举器的对象创建另一个列表,该枚举器提供删除、更新、创建操作以及新数据


以前没有这样做过,只是一个想法。

就像@Ashish提到的一样,触发器可以用来插入到一个单独的表中-这通常被称为审计跟踪表或审计日志表

以下是此类审计跟踪表中通常定义的列:“操作”插入、更新、删除、将其插入/删除/更新的tablename表、根据需要键入该表的主键、时间戳完成此操作的时间


最好在整个事务完成后审核日志。否则,若异常被传递回代码端,则需要单独调用以更新审计表。希望这对您有所帮助。

如果您谈论的是db表,您可以在db中使用触发器,也可以在应用程序中添加一些额外的代码—可能使用方面。如果您使用的是JPA,您可以使用实体监听器或执行一些额外的逻辑,将某些方面添加到DAO对象,并将特定方面应用到所有DAO,这些DAO对需要维护历史数据的实体执行CRUD。若您的DAO对象是无状态bean,那个么您可以使用拦截器来实现,在其他情况下,可以使用java代理功能、cglib或其他可能为您提供方面功能的lib。如果您使用的是Spring而不是EJB,则可以在应用程序上下文配置文件中建议DAO。

如果您使用的是Spring,则可以使用来解决此问题。

您有两个选项:

让数据库使用触发器自动处理此问题。我不知道您使用的是什么数据库,但它们都支持您可以使用的触发器。 在程序中编写在插入、更新和删除用户时执行类似操作的代码。
就我个人而言,我更喜欢第一种选择。它可能需要较少的维护。您可以在多个位置更新用户,所有这些位置都需要代码来更新其他表。此外,在数据库中,您有更多选项用于指定所需的值和完整性约束。

触发器不可建议,当我将审计数据存储在文件中时,我没有使用数据库…我的建议是创建表审计,在servlet的帮助下编写java代码,并将数据存储在文件或数据库或其他数据库中…

请添加更多信息!你是说Swing JTable吗?Web表在这种情况下,是哪个框架、JSF、Spring MVC、Struts……那么您已经从编写java代码来获取一个表中的更改变成了……编写java代码来获取另一个表中的更改?@Shakedown使用一个表很难跟踪表中所做的更改。如果你有历史表哟 在第一个表中每次更改时,您都会知道表的状态。然后,您可以编写java代码来比较这些表并获得差异。