| Interstage Shunsaku Data Manager アプリケーション開発ガイド - Microsoft(R) Windows(R) 2000/ Microsoft(R) Windows Server(TM) 2003 - - UNIX共通 - |
目次
索引
![]()
|
| 付録J C サンプルプログラム | > J.1 データの検索 |
検索操作において、“J.1.1 検索条件に一致するXML文書の件数を求める”および“J.1.2 検索条件に一致するXML文書を指定した形式で取得する”といった操作を経て、絞り込んだ条件を基に、データすべてを取得することになります。
“J.1.2 検索条件に一致するXML文書を指定した形式で取得する”の操作により得られたホテル名を基に、該当するホテルのデータをすべて取得する例を用いて、C APIの使用例を示します。
「2006年7月18日に大阪で宿泊可能なホテルのうち、該当する30件分のホテル情報は?」
年月日(2006年7月18日)および、場所(大阪)を条件に検索を行います。また、ホテル名に対応するレコード識別子を用いて、ホテルの詳細情報を取得します。
以下にC APIを使用したプログラミング例を示します。
#include <stdio.h>
#include "libshun.h"
/* 特定のXML文書をすべて取得する */
int main()
{
/* ハンドル変数群 */
SHUNHCON connectionHandle;
SHUNHSTMT statementHandle_serch;
SHUNHSTMT statementHandle_rec_id;
/* 作業用変数群 */
int status;
int i;
/* 入力パラメタ群 */
char *hostName;
int portNo;
char *ShunFileName;
int startNo;
int returnRequestCount;
char *queryForm;
char *returnForm;
char *sortForm;
/* 出力パラメタ群 */
int hitCount;
int returnCount;
int returnableCount;
SHUNRECID *recID_search;
SHUNRECID *recID_search_rec_id;
SHUNDATA *dataInfo_serch;
SHUNDATA *dataInfo_rec_id;
SHUNPOS *firstPosition, *lastPosition;
/* エラー用変数群 */
SHUNHANDLE errorHandle;
int errorLevel;
char *errorMessage;
/* 変数の初期化 */
connectionHandle = NULL;
statementHandle_serch = NULL;
statementHandle_rec_id = NULL;
/* コネクションハンドルの割当て */
status = ShunAllocHandle( NULL, &connectionHandle );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)connectionHandle;
goto ErrorEnd;
}
/* ホスト名・ポート番号、Shunsakuファイル名を指定してコネクションを確立 */
hostName = "DirSvr1";
portNo = 33101;
ShunFileName = "shunsakuFile1";
status = ShunConnect( connectionHandle, hostName, portNo, ShunFileName );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)connectionHandle;
goto ErrorEnd;
}
/* データ操作ハンドルの割当て */
status = ShunAllocHandle( connectionHandle, &statementHandle_serch );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)connectionHandle;
goto ErrorEnd;
}
/* 検索件数、検索式などの指定*/
startNo = 1;
returnRequestCount = 30;
queryForm = "/document {/base/prefecture == '大阪' "
"AND /information/date == '2006年07月18日'}";
returnForm = "/document/base/name, /document/base/price";
sortForm = NULL;
/* API呼出し データ検索 */
status = ShunSearch(
statementHandle_serch,
startNo,
NULL,
0,
returnRequestCount,
queryForm,
returnForm,
sortForm,
&hitCount,
&returnCount,
&returnableCount,
&recID_search,
&dataInfo_serch,
&firstPosition,
&lastPosition );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)statementHandle_serch;
goto ErrorEnd;
}
/* ヒット件数の取出し */
printf( "ヒット件数 = %d\n", hitCount );
printf( "応答件数 = %d\n", returnCount );
/* データ操作ハンドルの割当て */
status = ShunAllocHandle( connectionHandle, &statementHandle_rec_id );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)connectionHandle;
goto ErrorEnd;
}
/* IDを基にデータすべてを取得 */
if ( hitCount > 0 ) {
status = ShunSearchRecId(
statementHandle_rec_id,
returnCount,
recID_search,
&recID_search_rec_id,
&dataInfo_rec_id );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)statementHandle_rec_id;
goto ErrorEnd;
}
for (i = 0; i < returnCount; ++i) {
printf( "[詳細]%d件目 =%s\n", startNo + i, dataInfo_rec_id[i].Data);
}
}
/* データ操作ハンドルの解放 */
status = ShunFreeHandle( statementHandle_rec_id );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)statementHandle_rec_id;
goto ErrorEnd;
}
/* データ操作ハンドルの解放 */
status = ShunFreeHandle( statementHandle_serch );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)statementHandle_serch;
goto ErrorEnd;
}
/* コネクションの切断 */
status = ShunDisconnect( connectionHandle );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)connectionHandle;
goto ErrorEnd;
}
/* コネクションハンドルの解放 */
status = ShunFreeHandle( connectionHandle );
if ( status != SHUN_SUCCESS ) {
errorHandle = (SHUNHANDLE)connectionHandle;
goto ErrorEnd;
}
return 0;
ErrorEnd: /* エラーが発生した際のエラー処理 */
/* エラー情報の取得 */
status = ShunGetErrorMessage(errorHandle,
&errorLevel, &errorMessage);
if ( status == SHUN_SUCCESS ) {
switch ( errorLevel ) {
case SHUN_ERROR_CONNECTION:
printf("エラーレベル = SHUN_ERROR_CONNECTION\n");
break;
case SHUN_ERROR_DATA:
printf("エラーレベル = SHUN_ERROR_DATA\n");
break;
}
printf("エラーメッセージ = %s\n", errorMessage);
}
else {
printf("エラーメッセージ取得エラー : %d\n", status);
}
/* データ操作ハンドルの解放 */
if ( statementHandle_rec_id != NULL ) {
status = ShunFreeHandle( statementHandle_rec_id );
if ( status != SHUN_SUCCESS ) {
printf("データ操作ハンドル解放エラー : %d\n", status);
}
}
/* データ操作ハンドルの解放 */
if ( statementHandle_serch != NULL ) {
status = ShunFreeHandle( statementHandle_serch );
if ( status != SHUN_SUCCESS ) {
printf("データ操作ハンドル解放エラー : %d\n", status);
}
}
/* コネクションの切断 */
if ( connectionHandle != NULL) {
status = ShunDisconnect( connectionHandle );
if ( status != SHUN_SUCCESS ) {
printf("コネクション切断エラー : %d\n", status);
}
}
/* コネクションハンドルの解放 */
if ( connectionHandle != NULL) {
status = ShunFreeHandle( connectionHandle );
if ( status != SHUN_SUCCESS ) {
printf("コネクションハンドル解放エラー : %d\n", status);
}
}
return 1;
} |
ヒット件数 = 3
応答件数 = 3
[詳細]1件目 = <document>
<base>
<name>ホテル1</name>
<prefecture>大阪</prefecture>
<address>大阪府大阪市中央区</address>
<detail>http://xxxxx.co.jp</detail>
<price>9000</price>
</base>
<information>
<date>2006年07月18日</date>
</information>
<note>バス付 トイレ付 地下鉄 △△駅徒歩02分</note>
</document>
[詳細]2件目 = <document>
<base>
<name>ホテル2</name>
<prefecture>大阪</prefecture>
<address>大阪府大阪市中央区</address>
<detail>http://xxxxx.co.jp</detail>
<price>6000</price>
</base>
<information>
<date>2006年07月18日</date>
</information>
<note>バス付 トイレ付 地下鉄 △△駅徒歩05分</note>
</document>
[詳細]3件目 = <document>
<base>
<name>ホテル3</name>
<prefecture>大阪</prefecture>
<address>大阪府大阪市中央区</address>
<detail>http://xxxxx.co.jp</detail>
<price>7500</price>
</base>
<information>
<date>2006年07月18日</date>
</information>
<note>バス付 トイレ付 地下鉄 △△駅徒歩10分</note>
</document> |
目次
索引
![]()
|