2015-11-05 72 views
1

您好,我正在使用Java連接到IBM AS400。獲取Java中的AS400 DDS文件的最後更改日期

我想讀取DDS文件最後更改的時間戳,例如,最後一次SQL操作的時間戳(INSERT INTO MyLib/MyDDS VALUES (...))。

在5250終端中,我可以去「使用對象工作」,並選擇選項5(= show)或者簡單地打開元數據DSPFD FILE(MyLib/MyDDS)。 有時間戳。

另一種方法是運行dspjrn jrn(MyLib/MyJournal)來檢查日誌及其時間戳。

如何從Java訪問時間戳,例如:使用JTOpen或SQL?

謝謝:)

+1

對於數據庫文件,您需要查看成員更改日期而不是對象更改日期或對象最後使用日期。使用對象不能準確顯示上次數據更新的日期。您將不得不使用DSPFD查看成員詳細信息。 (WRKOBJ **經常**顯示正確的日期,但只有巧合時纔會顯示正確的日期。)到目前爲止的答案可能不合適。 – user2338816

+0

好的。我只是嘗試過,是的,它表現得像你說的。 DSPDF顯示正確的日期,WRKOBJ不顯示。WRKOBJ有權使用Last-Used-At,但只有一天,而不是時間戳 – KeKru

+0

請記住LastUsed用於該對象並不意味着來自任何成員的數據曾被讀取或寫入過。僅僅運行OPNDBF就足以觸發LastUsed而沒有任何I/O。 – user2338816

回答

1

Java的具體

JT400(和JTOpen)提供類和與系統API(如QUSRMBRD)接口的方法以及Java函數可用的返回值。

有關成員數據更改(及其他屬性)的信息,請參見com.ibm.as400.access.MemberDescription字段CHANGE_DATE_AND_TIME。

一般

本地物理文件(PFS)可以允許多個數據成員可單獨更新。成員實質上是來自包含它們的文件(類型爲* FILE)的單獨對象(對象類型* MBR)。 IFS將數據庫文件顯示爲'容器',即,就好像它們是目錄一樣。成員的表現與目錄中的流文件非常相似,並且由成員跟蹤各成員內容的更改,因爲包含的文件對象只有單個「更改」日期。

RTVMBRD是一個本地命令,應該始終存在。我不期望它,但權威可能會限制訪問。這將是CL通常如何檢索數據更改日期。另外,任何語言都可以使用Retrieve Member Description (QUSRMBRD) API來檢索成員詳細信息。

+0

適用於我:) AS400 as = new AS400(...); MemberDescription od = new MemberDescription(as,「YOURLIB」,「FILENAME」,「FILENAME」); Date lastChangeDate =(Date)od.getValue(MemberDescription.CHANGE_DATE_AND_TIME); – KeKru

3

SYSTABLESTAT似乎有您正在尋找的信息。

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

謝謝,但由於某種原因,我的測試系統上沒有QSYS或QSYS2中的SYSTABLESTAT。我會在幾天內在一個新的測試系統上嘗試它 – KeKru

+0

systablestat是表名很好用。 lastchg是你最後使用的只是一個日期。 – danny117

+0

@KeKru你在什麼操作系統版本?我看到SYSTABLESTAT至少回到5.4,但我在5.3知識中心沒有看到任何參考(儘管這並不意味着它不存在)。 另一件事是,你沒有權力,該目錄。默認情況下* PUBLIC擁有權限,但管理員可能已經刪除了該權限。 –

1

您可以使用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

+0

有許多權限限制謝謝,但它只返回一箇舊日期(我猜這是數據定義的最後一次更改),但不是最後一次數據更新的時間戳(插入到.. 。) – KeKru

+0

奇怪的是,在我發佈答案之前,我通過舊錶,更改記錄,然後運行該代碼來執行測試......它返回的日期只是之前的一小段時間。 –

+0

從鏈接的類定義:「注意:該類不適用於數據庫文件成員(類型* MBR)。要檢索文件成員的屬性,請使用MemberDescription。」_通常,不應更新成員的數據更新_object_ CHANGE_DATE。 (它不在我的系統上。) – user2338816

0

使用此對您的查詢...

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

不適用於我,SYSTSTAT或SYSSTAT在我的(非常奇怪的^^)系統上不可用 – KeKru

相關問題