Получить дату последнего изменения файла AS400 DDS в Java

Здравствуйте, я работаю с Java, подключаясь к IBM AS400.

Я хочу прочитать метку времени последнего изменения файла DDS, например, метку времени последней операции SQL (INSERT INTO MyLib/MyDDS VALUES (...)).

В терминале 5250 я могу перейти к "работе с объектами" и открыть метаданные, выбрав опцию 5 (= показать) или просто DSPFD FILE(MyLib/MyDDS), Есть метка времени.

Другой способ - бежать dspjrn jrn(MyLib/MyJournal) проверить журнал и его временные метки.

Как я могу получить доступ к временным меткам из Java, например, используя JTOpen или SQL?

Спасибо:)

5 ответов

Решение

Специфичный для Java

JT400 (и JTOpen) предоставляют классы и методы, которые взаимодействуют с системными API, такими как QUSRMBRD, и возвращают значения, используемые функциями Java.

Об изменениях данных членов (и других атрибутов) см. Поле com.ibm.as400.access.MemberDescription CHANGE_DATE_AND_TIME.

генеральный

Собственные физические файлы (PF) могут содержать несколько элементов данных, которые могут обновляться отдельно. Члены по существу являются отдельными объектами (типа объекта *MBR) от файлов (типа *FILE), которые их содержат. IFS представляет файлы базы данных как "контейнеры", т. Е. Как каталоги. Элементы представляются во многом как потоковые файлы в каталоге, и изменения в содержимом отдельных элементов отслеживаются участником, поскольку содержащиеся в нем объекты имеют только одну дату "изменения".

RTVMBRD является нативной командой и должна существовать всегда. Я не ожидал бы этого, но власть может ограничить доступ. Это будет то, как CL будет обычно получать даты изменения данных. В качестве альтернативы, API Получить описание элемента (QUSRMBRD) может использоваться любым языком для получения сведений об элементе.

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')

Использование QSYS2/SYSTSTAT или QSYS2/SYSTABLESTAT будет медленнее в ответ, так как он использует файлы соединения. Для достижения этого с хорошим использованием производительности

SELECT DBXATS
   FROM QSYS/QADBXREF
WHERE (DBXLIB = 'MyLib' and DBXFIL = 'MyDDS')
Другие вопросы по тегам