このRDMLXフォームにより、SQLServiceの使用例が提供されます。このフォームを使用すると、JDBCドライバーでデータベースに接続し、このデータベースに対してクエリーを実行できます。データを表示するには、READコマンドを実行してサーバーからデータをダウンロードし、リスト表示でそのデータを表示します。
この例では、JSMJDBC という IBM i のデータベースに接続します (これは IBM i の例であるため、データベース名はライブラリ名になります)。CONNECTコマンドで使用されるドライバー名は、SQLServiceプロパティ・ファイルで定義されるドライバー名とパスに相当します。アクセスするファイルはTBLNAMEとなります。これは、ID、NAME、AGE、SALARY、DEPT、GRADEの各フィールドで構成されます。
この例を実行するには、以下の操作を行う必要があります。
- LANSA Integrator インスタンスの jar ディレクトリにデータベースの JDBC ドライバーをインストールしておきます。また、SQLServices.propertiesファイルにこのJDBCドライバーと、接続するデータベースの詳細が含まれていることを確認します。
- LANSAリポジトリで以下の2つのフィールドを定義します。
- #JSMSTS、Char、長さ 20
- #JSMMSG、Char、長さ 256
- #JSMSRV フィールドに正しい JSM サーバー(およびポート) の値を設定します。
このコード例は以下のような手順になります。
- JSMCOMMAND 関連フィールドを定義します。
- テーブルのフィールドを結果リストの列にマッピングする場合に使用されるフィールドを定義します。ここで定義されるフィールドは、クエリーが実行されるテーブルで定義されたフィールドの長さとタイプに一致していなければなりません。
- フィールド列のマッピングを入れるために使用されるリストに必要な2つのフィールドを定義します。
- 列マッピングを入れるリストを定義します。このリストは 2 列のリストでなければなりません。最初の列には列名が、2番目のフィールドにはフィールド名が入ります。
- ステップ 2 で定義したフィールドを使って、2 つの作業リストを定義します。これらのリストは、READ コマンドを使って、クエリにより作成された結果リストから読み込まれます。この例では2つのリストが作成され、結果リストに戻りながら、必要に応じて異なる列にアクセスする方法が実証されます。2つの参照リストはこれらの作業リストと同じ形式になるように定義され、この参照リストを使用して画面に結果が表示されます。
- JSM サーバー設定を行います。
- JSM システム、SQLService の順に接続します。
- 組み込み関数 JSMX_OPEN を使用して、この JSMX クライアントと Java Service Manager を接続したり、サービスのスレッドを開始することができます。
- Service_Load (SQLService) コマンドは、サービスをロードして初期化します。
- JDBC ドライバーに接続します。
- 列フィールドのマッピングを定義します。この定義では、#FIELD を適切な列と #1 に設定します。COLUMN には (テーブルから).適切なフィールド名を設定します。各マッピングは、#MAPLST作業リストに新しいエントリーとして追加され、SET PARAMETER(*MAP)コマンドが発行されます。SERVICE_LISTはこのコマンドの一部として渡されます。ここで定義されるフィールドは、マッピング・リストで使用されるフィールドになります。マッピング・リストは、JSMコマンドのTO_GET部分でも指定する必要があります。
- JDBCドライバー、JSMシステムの順に接続を解除します。
- フォームを閉じたら、サービスとの接続を解除し、一時ディレクトリをアンロードしてサービスを閉じます。
****************************************************
*この RDMLX フォームでは SQLService の使用例が示されています。
*このフォームを使って、JDBC ドライバでデータベースに
*接続後、このデータベースに対するクエリを実行することができます。
*このデータを確認するために、ユーザーは読み込み (READ) コマンド
*を実行して、サーバーからデータをダウンロードし、
*これをリストビューに表示します。
*この例では、JSMJDBC という名前の IBM i データベースに
*接続していることに注意してください。
*(これは IBM i の例のため、このデータベース名はライブラリ名です)。
*CONNECT (接続) コマンドで使用されるドライバ名は、
*SQLService のプロパティ・ファイルに定義されたドライバ名と
*パスに一致しています。アクセスするファイルの名前は、
*TBLNAME で、このファイルは ID、NAME、AGE、
*SALARY、DEPT、GRADE のフィールドから構成されています。
*免責事項 : 以下に示されているマテリアルは、
*サンプル用としてのみ提供されています。このマテリアルおよびその利用に関しては、
*明示または暗示を問わず、
*全く保証されません。****************************************************FUNCTION OPTIONS(*DIRECT)Begin_Com Role(*EXTENDS #PRIM_FORM) Clientheight(380) Clientwidth(679) Height(407) Left(313) Top(101) Width(687)Define_Com Class(#PRIM_STBR) Name(#STBR_1) Displayposition(1) Height(24) Left(0) Messageposition(1) Parent(#COM_OWNER) Tabposition(1) Tabstop(False) Top(356) Width(679)Define_Com Class(#PRIM_LTVW) Name(#READA) Componentversion(2) Displayposition(2) Fullrowselect(True) Height(150) Left(168) Parent(#COM_OWNER) Showsortarrow(True) Tabposition(2) Top(24) Width(500)Define_Com Class(#PRIM_PHBN) Name(#READ1) Caption('Read 1') Displayposition(3) Left(40) Parent(#COM_OWNER) Tabposition(3) Top(61)Define_Com Class(#PRIM_PHBN) Name(#READ2) Caption('Read 2') Displayposition(4) Left(43) Parent(#COM_OWNER) Tabposition(4) Top(112)Define_Com Class(#PRIM_LVCL) Name(#LVCL_1) Displayposition(1) Parent(#READA) Source(#SQLREAD) Width(100)
*JSMCOMMAND 関連フィールドを定義Define Field(#JSMCMD) Type(*Char) Length(256)Define Field(#JSMHND) Type(*Char) Length(4)Define Field(#JSMSRV) Type(*Char) Length(50)
*テーブルのフィールドを結果リストの列にマッピングする場合に使用されるフィールドを定義ここで定義されるフィールドは、クエリーが実行されるテーブルで定義されたフィール*ドの長さとタイプに一致していなければなりません。Define Field(#COL1) Type(*Char) Length(010)Define Field(#COL2) Type(*Char) Length(020)Define Field(#COL3) Type(*Dec) Length(008) Decimals(0)Define Field(#COL4) Type(*Dec) Length(012) Decimals(2)
*フィールド列のマッピングを入れるために使用するリストに必要となる 2 つのフィールドを定義Define Field(#FIELD) Type(*Char) Length(010)Define Field(#COLUMN) Type(*Char) Length(030)
*列マッピングを入れるリストを定義します。このリストは 2 列のリストでなければなりません。最初の列には列名、2 番目のフィールドにはフィールド名が入ります。Def_List Name(#MAPLST) Fields(#FIELD #COLUMN) Type(*Working)
*ステップ 2 で定義したフィールドを使って、2 つの作業リストを定義します。これらのリストは、READ コマンドを使って、クエリにより作成された結果リストから読み込まれます。ここでは 2 つのリストを作成し、必要に応じて結果リストに戻って、様々な列にアクセスする方法が示されています。2 つの参照リストをこれらの作業リストと同じ形式で定義します。この参照リストは画面に結果が表示する際に利用されます。Def_List Name(#WRKLST1) Fields(#COL1 #COL3) Type(*Working)Def_List Name(#WRKLST2) Fields(#COL1 #COL2 #COL4) Type(*Working)EVTROUTINE handling(#com_owner.Initialize)SET #com_owner caption(*component_desc)
*JSM サーバー設定#JSMSRV := 'SERVER1:4560'
*SQLService に接続するメソッドを実行#COM_OWNER.Connect
*マッピングの設定#COM_OWNER.Mapping
*クエリ実行#COM_OWNER.RunQueryENDROUTINE
*JSM システム、SQLService の順に接続Mthroutine Name(Connect)
*サービスを'開く'
*The JSMX_OPEN Builtin Function is used to connect this JSMX client to the Java Services Manager, and to start a thread for the service.Use Builtin(JSMX_OPEN) With_Args(#JSMSRV) To_Get(#JSMSTS #JSMMSG #JSMHND)#COM_OWNER.Check(#JSMSTS #JSMMSG)
*サービスの'ロード'
*Service_Load(SQLService) コマンドは、サービスをロードして初期化します。#JSMCMD := 'Service_Load Service (SQLService)'Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)#COM_OWNER.Check(#JSMSTS #JSMMSG)
*Connect to the JDBC driver#JSMCMD := 'Connect Driver(DB2) Database(JSMJDBC) User(PERSON1) Password(BINGO)'Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)#COM_OWNER.Check(#JSMSTS #JSMMSG)EndroutineMthroutine Name(Mapping)
*列フィールドのマッピングを定義定義するには、#FIELDを適切な列に、#COLUMNを(テーブルの)適切なフィールド名に設定します。各マッピングは、#MAPLST作業リストに新しいエントリーとして追加され、SET PARAMETER(*MAP)コマンドが発行されます。SERVICE_LISTはこのコマンドの一部として渡され、ここで定義するフィールドは、マッピング・リストで使用されるフィールドになります。マッピング・リストは、JSMコマンドのTO_GET部分でも指定する必要があります。#FIELD := COL1#COLUMN := IDAdd_Entry To_List(#MAPLST)#FIELD := COL2#COLUMN := NAMEAdd_Entry To_List(#MAPLST)#FIELD := COL3#COLUMN := AGEAdd_Entry To_List(#MAPLST)#FIELD := COL4#COLUMN := SALARYAdd_Entry To_List(#MAPLST)#JSMCMD := 'Set Parameter(*Map) Service_List(FIELD,COLUMN)'Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG #MAPLST)#COM_OWNER.Check(#JSMSTS #JSMMSG)ENDROUTINEMthroutine Name(RunQuery)#JSMCMD := 'Execute Query(Select ID,NAME,AGE,SALARY From TBLNAME)'Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)#COM_OWNER.Check(#JSMSTS #JSMMSG)ENDROUTINE
*JDBCドライバー、JSMシステムの順に接続を解除Mthroutine Name(Disconnect)
*Disconnect from the serviceUse Builtin(JSMX_COMMAND) With_Args(#JSMHND DISCONNECT) To_Get(#JSMSTS #JSMMSG)#COM_OWNER.Check(#JSMSTS #JSMMSG)
*サービスの'アンロード'
*このコマンドはサービスをアンロードして、一時ディレクトリを削除するたには必須です。#JSMCMD := 'Service_Unload'Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)#COM_OWNER.Check(#JSMSTS #JSMMSG)
*サービスを'閉じる'
*このプロセスの最後の手順は、サービスを閉じることです。Use Builtin(JSMX_CLOSE) With_Args(#JSMHND) To_Get(#JSMSTS #JSMMSG)#COM_OWNER.Check(#JSMSTS #JSMMSG)Endroutine
*フォームが閉じられたら、サービス接続を解除EVTROUTINE HANDLING(#COM_OWNER.Closing) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)#COM_OWNER.DisconnectENDROUTINEEVTROUTINE HANDLING(#READ1.Click)Clr_List #WRKLST1Clr_List #READAUse Builtin(JSMX_COMMAND) With_Args(#JSMHND 'Read Service_List(COL1,COL3) Scroll(*NO)') To_Get(#JSMSTS #JSMMSG #WRKLST1)#COM_OWNER.Check(#JSMSTS #JSMMSG)Selectlist #wrklst1#SQLREAD := #COL1.Trim + ' ' + #COL3.AsString.TrimAdd_Entry #readaEndSelectENDROUTINEEVTROUTINE HANDLING(#READ2.Click)Clr_List #WRKLST2Clr_List #READAUse Builtin(JSMX_COMMAND) With_Args(#JSMHND 'Read Service_List(COL1,COL2,COL4) Scroll(*NO)') To_get(#JSMSTS #JSMMSG #WRKLST2)#COM_OWNER.Check(#JSMSTS #JSMMSG)SelectList #WRKLST2#SQLREAD := #COL1.Trim + ' ' + #COL2.Trim + ' ' + #COL4.AsString.TrimAdd_Entry #READAENDSELECTENDROUTINE
*次のメソッド・ルーチンはすべての JSMX コマンドにより利用され、発生したエラーの処理を行います。Mthroutine Name(Check)Define_Map For(*Input) Class(#JSMSTS) Name(#I_STATUS)Define_Map For(*Input) Class(#JSMMSG) Name(#I_MESSAGE)Message Msgtxt(#JSMSTS.Trim + ': ' + #JSMMSG)EndroutineEND_COM