Получить дату последнего изменения файла 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')