你好,我正在使用Java连接到IBM AS400。
我想读取DDS文件最后一次更改的时间戳,例如最后一次SQL操作(INSERT INTO MyLib/MyDDS VALUES (...)
)的时间戳。
在5250终端中,我可以转到"使用对象",并通过选择选项5(=show)或简单地选择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'
Java特定
JT400(和JTOpen)提供了与系统API(如QUSRMBRD)接口的类和方法,并返回Java函数可用的值。
有关成员数据更改(和其他属性),请参阅com.ibm.as400.access.MemberDescription字段CHANGE_DATE_and_TIME。
常规
本机物理文件(PF)可以允许单独更新多个数据成员。成员本质上是独立的对象(对象类型为*MBR)和包含它们的文件(类型为*FILE)。IFS将数据库文件表示为"容器",即,就好像它们是目录一样。成员的显示方式与目录中的流文件非常相似,由于包含的文件对象只有一个"更改"日期,因此对单个成员内容的更改将按成员进行跟踪。
RTVMBRD是一个本机命令,应该始终存在。我没想到,但当局可能会限制访问。这将是CL通常检索数据更改日期的方式。或者,任何语言都可以使用检索成员描述(QUSRMBRD)API来检索成员详细信息。
您可以使用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')
使用QSYS2/SYSTSTAT或QSYS2/SYSTABLESTAT的响应速度会较慢,因为它使用的是联接文件。要以良好的性能实现这一点,请使用
SELECT DBXATS
FROM QSYS/QADBXREF
WHERE (DBXLIB = 'MyLib' and DBXFIL = 'MyDDS')