如何在Java中验证表未被修改?

时间:2014-03-12 15:52:23

标签: java oracle junit resultset

我正在编写一些测试,我想在这些特定测试期间验证我的数据库是否未被修改。有没有一种简单的方法可以做到这一点,不需要我为每个表写单独的查询?基本上,我想要这样的事情:

 public Map<String,ResultSet> getDbSnapShot(List<String> tableNames)
 {
     //get rows for specified tables to check from tableNames parameter 
     //returns a map where the key is the table name and the value is the result set
 }

 public void verifySnapShotsAreEqual(Map<String,ResultSet> snapShot1, Map<String,ResultSet> snapshot2)
 {
      //compare snapshot1 and snapshot 2, verify no rows have been modified 
 }

然后我会在测试前后调用getDbSnapShot并比较结果。

非常感谢。

3 个答案:

答案 0 :(得分:3)

查询 ALL_TAB_MODIFICATIONS USER_TAB_MODIFICATIONS 表格并获取所需信息。

该表包含以下列:

  • TABLE_OWNER修改后的表的所有者。
  • TABLE_NAME修改后的表的名称
  • PARTITION_NAME已修改分区的名称
  • SUBPARTITION_NAME已修改的子分区的名称
  • INSERTS自上次收集统计信息以来的大致插入次数
  • 更新自上次收集统计信息以来的大约更新次数
  • DELETES自上次收集统计信息以来的大约删除次数
  • TIMESTAMP表示上次修改表格
  • DROP_SEGMENTS自上次分析以来删除的分区和子分区段数

在查询表之前,您必须通过运行GATHER_TABLE_STATS过程来收集统计数据。

Source Source

答案 1 :(得分:2)

为了获取数据库中所有表中的所有记录,它将取决于您使用的数据库以及您需要的确切代码。

请注意,比较表中的数据可能不是您想要的,比较上次修改的时间戳可能会更好。

答案 2 :(得分:0)

在数据库上实现一个触发器,在修改表时更新日志表。

然后在运行测试后检查日志表。