資料類型範例的用法

您可以使用 IBM® Toolbox for Java™ AS400DataType 類別及 ProgramCall,以提供資料給程式參數,並解譯程式參數中傳回的資料。

註: 請閱讀程式碼範例免責聲明中的重要法律資訊。

範例:使用 AS400DataType 類別與 ProgramCall

下列範例將說明如何使用 ProgramCall 呼叫系統 API、 QUSRMBRD「擷取成員說明」,藉以使用 AS400DataType 類別。QUSRMBRD API 會擷取資料庫檔案中特定成員的說明。範例後的表格將列出必要的 QUSRMBRD 參數以及範例擷取的資訊類型。

     // Create a ProgramCall object.  We will set the program name and
     // parameter list later.
     ProgramCall qusrmbrd = new ProgramCall(new AS400());

     // Create an empty program parameter list
     ProgramParameter[] parms = new ProgramParameter[6];

     // Create AS400DataTypes to convert our input parameters from Java types
     // to server data
     AS400Bin4 bin4 = new AS400Bin4();

     // We need a separate AS400Text object for each parameter with a
     // different length because the AS400Text class requires the length to
     // be specified.
     AS400Text char8Converter = new AS400Text(8)
     AS400Text char20Converter = new AS400Text(20);
     AS400Text char10Converter = new AS400Text(10);
     AS400Text char1Converter = new AS400Text(1);

     // Populate our parameter list; we use the AS400DataType objects to
     // convert our Java values to byte arrays containing server data.

     // For the output parameter we need only specify how many bytes will
     // be returned
     parms[0] = new ProgramParameter(135);
     parms[1] = new ProgramParameter(bin4.toBytes(new Integer(135)));
     parms[2] = new ProgramParameter(char8Converter.toBytes("MBRD0100"));
     parms[3] = new ProgramParameter(char20Converter.toBytes("MYFILE    MYLIB     "));
     parms[4] = new ProgramParameter(char10COnverter.toBytes("MYMEMBER  "));
     parms[5] = new ProgramParameter(char1Converter.toBytes("0"));

     // Set the program name and parameter list
     qusrmbrd.setProgram("/qsys.lib/qusrmbrd.pgm", parms);

     // Call the program
      try
     {
       qusrmbrd.run();
     }
     catch (Exception e)
     {
       // Handle any exceptions
     }

     // Get the information retrieved. Note that this is raw server data.
byte[] receiverVar = parms[0].getOutputData();


  // We need this to convert the time and date data
     AS400Text char13Converter = new AS400Text(13);

  // We need this to convert the text description data
     AS400Text char50Converter = new AS400Text(50);

     // Create an AS400Structure to handle the returned information
     AS400DataType[] dataTypeArray = new AS400DataType[11];
     dataTypeArray[0] = bin4;
     dataTypeArray[1] = bin4;
     dataTypeArray[2] = char10Converter;
     dataTypeArray[3] = char10Converter;
     dataTypeArray[4] = char10Converter;
     dataTypeArray[5] = char10Converter;
     dataTypeArray[6] = char10Converter;
     dataTypeArray[7] = char13Converter;
     dataTypeArray[8] = char13Converter;
     dataTypeArray[9] = char50Converter;
     dataTypeArray[10] = char1Converter;
     AS400Structure returnedDataConverter = new AS400Structure(dataTypeArray);


     // Convert the data returned to an array of Java Objects using our
     // returnedDataConverter
     Object[] qusrmbrdInfo = dataConverter.toObject(receiverVar, 0);


     // Get the number of bytes returned
     Integer bytesReturned = (Integer)qusrmbrdInfo[0];
     Integer bytesAvailable = (Integer)qusrmbrdInfo[1];
     if (bytesReturned.intValue() != 135)
     {
       System.out.println("Wrong amount of information returned.");
              System.exit(0);
     }
     String fileName = (String)qusrmbrdInfo[2];
     String libName = (String)qusrmbrdInfo[3];
     String mbrName = (String)qusrmbrdInfo[4];
     String fileAttribute = (String)qusrmbrdInfo[5];
     String sourceType = (String)qusrmbrdInfo[6];
     String created = (String)qusrmbrdInfo[7];
     String lastChanged = (String)qusrmbrdInfo[8];
     String textDesc = (String)qusrmbrdInfo[9];
     String isSourceFile = (String)qusrmbrdInfo[10];

     // We will just output all the information to the screen
     System.out.println(fileName + " " + libName + " " + mbrName + " " +
                        fileAttribute + sourceType + " " + created + " " +
                        lastChanged + " " + textDesc + " " + isSourceFile);

下列表格將列出用於前述範例的 QUSRMBRD API 必要參數。

QUSRMBRD 參數 輸入或輸出 類型 說明
接收器變數 輸出 Char(*) 將包含所擷取資訊的字元緩衝區。
接收器變數的長度 輸入 Bin(4) 提供給接收器變數的字元緩衝區長度。
格式名稱 輸入 Char(8) 指定要擷取之資訊類型的格式。必須是下列其中一項:
  • MBRD0100
  • MBRD0200
  • MBRD0300
下列範例指定 MBRD0100。
限定資料庫檔案名稱 輸入 Char(20) 指限定的檔案名稱。此為填好 10 個字元的檔案名稱空格, 後面跟著填好 10 個字元的檔案庫名稱空格。檔案庫名稱可以使用 *CURLIB 及 *LIBL 的特殊值。
資料庫成員名稱 輸入 Char(10) 填好 10 個字元的成員名稱空格。容許使用 *FIRST 及 *LAST 的特殊值。
置換處理程序 輸入 Char(1) 是否要處理置換。0 指出不處理置換。這是我們將指定的值。

下列表格將列出範例擷取的資訊類型(根據前述範例中指定的格式 MBRD0100):

擷取的資訊 類型
傳回的位元組 Bin(4)
可用的位元組 Bin(4)
資料庫檔案名稱 Char(10)
資料庫檔案程式庫名稱 Char(10)
成員名稱 Char(10)
檔案屬性﹝檔案的類型:PF、LF 及 DDMF﹞ Char(10)
來源類型﹝如果此為原始檔,則指來源成員的類型﹞ Char(10)
建立日期與時間 Char(13)
上次變更來源的日期與時間 Char(13)
成員本文說明 Char(50)
原始檔﹝檔案是否為原始檔:0=資料檔、1=原始檔﹞ Char(1)