在 Java 中获取 AS400 DDS 文件的最后更改日期

Get last changed date of AS400 DDS file in Java

您好,我正在使用 Java 连接到 IBM AS400。

我想读取 DDS 文件最后一次更改的时间戳,例如最后一个 SQL 操作的时间戳 (INSERT INTO MyLib/MyDDS VALUES (...)).

在 5250 终端中,我可以转到 "work with objects" 并通过选择选项 5(=显示)或简单地 DSPFD FILE(MyLib/MyDDS) 打开元数据。 有时间戳。

另一种方法是 运行 dspjrn jrn(MyLib/MyJournal) 检查日志及其时间戳。

如何从 Java 访问时间戳,例如使用 JTOpen 或 SQL?

谢谢:)

SYSTABLESTAT 似乎有您要查找的信息。

SELECT LAST_USED_TIMESTAMP
FROM QSYS2/SYSTABLESTAT
WHERE TABLE_SCHEMA = 'MyLib' AND TABLE_NAME = 'MyDDS'

您可以使用 ObjectDescription 对象获取最后更改日期。

AS400 as400 = new AS400();
ObjectDescription od = new ObjectDescription(as400, "YOURLIB", "FILENAME", "FILE");

Date lastChangeDate = (Date)od.getValue(ObjectDescription.CHANGE_DATE);

编辑:使用 MemberDescription 和 MemberDescription.CHANGE_DATE_AND_TIME

在您的查询中使用它...

SELECT LAST_USED_TIMESTAMP
FROM QSYS2/SYSTSTAT
WHERE (TABLE_SCHEMA, TABLE_NAME) = ('MyLib', 'MyDDS')

Java具体

JT400(和 JTOpen)提供 类 和与系统 API 接口的方法,例如 QUSRMBRD 和 Java 函数可用的 return 值。

对于成员数据更改(和其他属性),请参阅 com.ibm.as400.access.MemberDescription 字段 CHANGE_DATE_AND_TIME。

一般

本机物理文件 (PF) 可以允许多个可以单独更新的数据成员。成员本质上是独立于包含它们的文件(*FILE 类型)的对象(对象类型为 *MBR)。 IFS 将数据库文件显示为 'containers',即,就好像它们是目录一样。成员的呈现方式很像目录中的流文件,并且由于包含的文件对象只有一个 'change' 日期。

,因此成员会跟踪对各个成员内容的更改。

RTVMBRD 是本机命令,应该始终存在。我不希望它,但权限可能会限制访问。这将是 CL 通常检索数据更改日期的方式。或者,任何语言都可以使用 Retrieve Member Description (QUSRMBRD) API 来检索会员详细信息。

使用 QSYS2/SYSTSTAT 或 QSYS2/SYSTABLESTAT 响应速度会变慢,因为它正在使用连接文件。要以良好的性能实现这一点,请使用

SELECT DBXATS
   FROM QSYS/QADBXREF
WHERE (DBXLIB = 'MyLib' and DBXFIL = 'MyDDS')