10.8.2 応答電文の形式

応答電文は,XML文書形式で出力されます。

なお,検索結果(列名など)にXML文書で使用できない「<」や「&」などの文字が含まれていた場合,「&lt;」や「&amp;」などにエスケープして応答電文に設定されます。そのため,データベースに格納されているデータをエスケープする必要はありません。

<この項の構成>
(1) 応答電文の形式
(2) 応答電文の要素と属性

(1) 応答電文の形式

応答電文の形式は,単一のSQL文の実行要求に対する応答の場合と,複数のSQL文の実行要求に対する応答の場合とで異なります。

応答電文の形式を次に示します。なお,斜体の文字は可変値を表します。

単一のSQL文の実行要求に対する応答の場合
ルート要素(DBadapter要素)の下位要素としてSQL識別子要素が出力されます。

<DBadapter>
 <SQL識別子 out_maxOccurs="検索結果出力最大件数">
   <DBA_IN_DATA>
     <引数要素 nulldata="空要素の扱い">引数要素のデータ</引数要素>
       :
   </DBA_IN_DATA>
   <DBA_OUT_DATA>
     <DBA_ResultSetNo>SQLリターン値</DBA_ResultSetNo>
     <DBA_ResultSetXmlNo>検索結果の件数</DBA_ResultSetXmlNo>
     <DBA_ResultSetName>
       <DBA_ResultColumnName cid="列番号">列の名称</DBA_ResultColumnName>
         :
     </DBA_ResultSetName>
     <DBA_ResultSet lid="行番号">
       <DBA_ResultColumn cid="列番号">該当行n列目の検索結果</DBA_ResultColumn>
         :
     </DBA_ResultSet>
       :
   </DBA_OUT_DATA>
 </SQL識別子>
</DBadapter>

複数のSQL文の実行要求に対する応答の場合
ルート要素(DBadapter要素)の下位要素としてDBA_MULTI_SQL要素が出力されます。要求電文で記述したDBA_MULTI_SQL要素と同数のDBA_MULTI_SQL要素が出力されます。

<DBadapter>
 <DBA_MULTI_SQL>
   <SQL識別子 out_maxOccurs="検索結果出力最大件数">
     <DBA_IN_DATA>
       <引数要素 nulldata="空要素の扱い">引数要素のデータ</引数要素>
         :
     </DBA_IN_DATA>
     <DBA_OUT_DATA>
       <DBA_ResultSetNo>SQLリターン値</DBA_ResultSetNo>
       <DBA_ResultSetXmlNo>検索結果の件数</DBA_ResultSetXmlNo>
       <DBA_ResultSetName>
         <DBA_ResultColumnName cid="列番号">列の名称</DBA_ResultColumnName>
           :
       </DBA_ResultSetName>
       <DBA_ResultSet lid="行番号">
         <DBA_ResultColumn cid="列番号">該当行n列目の検索結果</DBA_ResultColumn>
           :
       </DBA_ResultSet>
         :
     </DBA_OUT_DATA>
   </SQL識別子>
 </DBA_MULTI_SQL>
   :
</DBadapter>

なお,要求電文で入力情報が0(ゼロ)の場合,応答電文は次の形式で出力されます。

[図データ]

(2) 応答電文の要素と属性

応答電文の要素と属性について次の表に示します。

表10-26 応答電文の要素と属性(DBアダプタ用のサービスリクエスタ)

要素名・属性名種別内容と設定値格納される値の型省略の有無
DBadapter要素ルート要素です。次の下位要素があります。
単一SQL文の実行要求に対する応答の場合
下位要素としてSQL識別子要素が出力されます。
複数SQL文の実行要求に対する応答の場合
下位要素としてDBA_MULTI_SQL要素が出力されます。
×
DBA_MULTI_SQL要素サービスリクエスタからの複数のSQL文の実行要求に対する応答であることを示す要素です。SQL識別子以降の下位要素に入力情報(要求電文での設定情報)および出力情報(SQLの実行結果情報)が出力されます。
要求電文で記述したDBA_MULTI_SQL要素と同数のDBA_MULTI_SQL要素が出力されます。
×※1
SQL識別子要素下位の要素「DBA_IN_DATA」および「DBA_OUT_DATA」に,それぞれ入力情報(要求電文での設定情報)および出力情報(SQLの実行結果情報)が格納されます。
SQL識別子は,要求電文に設定したSQL識別子です。
なお,属性out_maxOccurs(検索結果出力最大件数)は,要求電文で設定した場合にだけ格納されます。
×
DBA_IN_DATA要素要求電文で設定した入力情報がこの要素の下位要素に格納されます。×
DBA_OUT_DATA要素下位の要素にSQL実行時の出力情報が格納されます。実行したSQLによって,格納される出力情報が異なります。
INSERTの場合
DBA_ResultSetNoが下位要素として格納されます。
SELECTの場合
次の要素が下位要素として格納されます。
  • DBA_ResultSetNo
  • DBA_ResultSetXmlNo
  • DBA_ResultSetName
  • DBA_ResultSet
×
DBA_ResultSetNo要素実行したSQLによって,格納される出力情報が異なります。
INSERTの場合
更新した行数(PreparedStatementクラスのexecuteUpdateで取得した値)が格納されます。格納される要素の値が2,147,483,647を超えた場合に格納される値は,DB Connectorの使用するJDBCドライバのPreparedStatementクラスのexecuteUpdateの仕様に従います。
SELECTの場合
検索結果の件数が格納されます。
格納される要素の値が2,147,483,647を超えた場合,2,147,483,647が格納されます。
xsd:int×
DBA_ResultSetXmlNo要素実行したSQLがSELECTの場合,実際の検索結果の件数(DBA_ResultSetNoの値)のうち,この応答電文に格納されている検索結果の件数が格納されます。
DBA_ResultSetNoの値が,要求電文またはSQLオペレーション定義ファイルのout_maxOccursに指定した値よりも大きい場合,out_maxOccursに指定した値が格納されます。
また,格納される要素の値が2,147,483,647を超えた場合,2,147,483,647が格納されます。
xsd:int
DBA_ResultSetName要素実行したSQLがSELECTの場合,検索結果の列の名称が,下位要素DBA_ResultColumnNameに格納されます。
なお,検索結果が0件の場合,この要素は格納されません。
DBA_ResultColumnName要素実行したSQLがSELECTの場合,該当する列の名称が格納されます。
なお,結果の列がデータベースの列の場合,「列名」の形式で設定されます。また,結果の列名が取得されない場合,SQLを発行した先のデータベースの仕様に従った名称が返されます。
属性にcidがあります。
xsd:string
 cid属性DBA_ResultColumnNameに格納される値の列番号を示します。xsd:int
DBA_ResultSet要素実行したSQLがSELECTの場合,一行ごとの結果情報が,下位要素のDBA_ResultColumnに格納されます。なお,検索結果が0件の場合,この要素は格納されません。
属性にlidがあります。
 lid属性DBA_ResultSetに格納される値の行番号を示します。
また,格納される要素の値が2,147,483,647を超えた場合,2,147,483,647が格納されます。
xsd:int
DBA_ResultColumn要素該当する行(DBA_ResultSetで示される行)のn列目の検索結果が格納されます。※2
属性にcidおよびnulldataがあります。
xsd:string
 cid属性DBA_ResultColumnに格納される値の列番号を示します。xsd:int
 nulldata属性DBA_ResultColumnに格納されたデータがnullであるかどうかを示します。
nullの場合「Y」が設定されます。nullでない場合,この属性は設定されません。
xsd:string
(凡例)
-:値は格納されません。
○:SQLがSELECTの場合にだけ出力されます。
△:SQLがSELECTの場合で,実行結果が1件以上のときに出力されます。
×:必ず出力されます。省略されません。
注※1
複数のSQL文の実行要求に対する応答の場合には必ず出力されます。単一のSQL文の実行要求に対する応答の場合には出力されません。
注※2
ResultSetクラスのgetStringで取得した値が格納されます。そのため,検索結果の書式はDB Connectorの使用するJDBCドライバのResultSetクラスのgetStringの仕様に従います。検索結果の書式を変更する場合,データベースが提供する関数(ファンクション)を使用して検索してください。
HiRDBのTIMESTAMP型(列名:c_ts)の書式をVARCHAR_FORMAT関数で変更する場合の例を次に示します。
 
SELECT VARCHAR_FORMAT(c_ts, 'YYYY-MONTH-DD HH:MI') FROM 表名