ページの先頭行へ戻る
Interstage Shunsaku Data Manager アプリケーション開発ガイド

6.7.1 ダイレクト検索を使用したデータ削除/更新の使い方

ダイレクト検索を使用したレコードIDによるデータ削除または更新処理について説明します。


まず、ダイレクト検索APIを発行して、対象データのレコードIDとデータ全体を取得します。

次に、取得したレコードID情報を使用して、対象データの削除または更新を実行します。


処理の流れ

ダイレクト検索とレコードID削除・更新の流れについて以下の図に示します。


図6.15 ダイレクト検索を使用したデータ削除/更新の流れ


データ操作の効果

通常のレコードIDによるデータ操作と比較して、ダイレクト検索を使用したデータ操作の効果について、以下に示します。


図6.16 図:ダイレクト検索を使用したデータ操作の効果


通常のレコードIDを取得の検索処理がダイレクト検索に代わることで、searcherへのアクセスが不要になり、高速な処理が実現できます。


以下に、Java API、.NET API、C APIの記述例を示します。


Java APIの場合


ダイレクト検索を使用してデータ削除を行う場合の記述例

ShunConnection con = new ShunConnection();

ShunPreparedKey preSkey = con.prepareSearchKey("key1", "/");
preSkey.add("20061101,00000001");
ShunResultSet rs = preSkey.searchByKey();
ShunPreparedRecordID prid = con.prepareDeleteRecordID();
while (rs.next()) {
  prid.add(rs.getRecordID());
}
prid.deleteByRecordID();
prid.close();
rs.close();
preSkey.close();

con.close();

ダイレクト検索を使用してデータ更新を行う場合の記述例

ShunConnection con = new ShunConnection();
ShunPreparedKey preSkey = con.prepareSearchKey("key1", "/");
preSkey.add("20061101,00000001");
ShunResultSet rs = preSkey.searchByKey();
ShunPreparedRecordID prid = con.prepareUpdateRecordID();
while (rs.next()) {
  prid.add(rs.getRecordID(), updateData);
}
prid.updateByRecordID();
prid.close();
rs.close();
preSkey.close();

con.close();

.NET APIの場合


ダイレクト検索を使用してデータ削除を行う場合の記述例

ShunService service = new ShunService();
service.Connect();

ShunRecord searchRecord = new ShunRecord();
searchRecord.Key = "20061101,00000001";

ShunKeyRequirement keyReq = new ShunKeyRequirement();
keyReq.KeyName = "key1";
keyReq.SearchType = ShunKeySearchType.CompleteMatch;
keyReq.Records.Add( searchRecord );

ShunResultSet rs = service.SearchByKey( keyReq, "/" );
ShunRecordCollection deleteRecords = new ShunRecordCollection();

foreach ( ShunRecord record in rs.Records ) {
  deleteRecords.Add( record );
}

service.Delete( deleteRecords );

service.Disconnect();

ダイレクト検索を使用してデータ更新を行う場合の記述例

ShunService service = new ShunService();
service.Connect();

ShunRecord searchRecord = new ShunRecord();
searchRecord.Key = "20061101,00000001";

ShunKeyRequirement keyReq = new ShunKeyRequirement();
keyReq.KeyName = "key1";
keyReq.SearchType = ShunKeySearchType.CompleteMatch;
keyReq.Records.Add( searchRecord );

ShunResultSet rs = service.SearchByKey( keyReq, "/" );
ShunRecordCollection updateRecords = new ShunRecordCollection();

foreach ( ShunRecord record in rs.Records ) {
  record.Data = updateData;
  updateRecords.Add( record );
}

service.Update( updateRecords );

service.Disconnect();

C APIの場合


ダイレクト検索を使用してデータ削除を行う場合の記述例

/* 以下のように用意されていることを仮定しています           */
/* pKey       :ダイレクトアクセスキーを設定する構造体配列  */

SHUNHSTMT StmtH_Search;
SHUNHSTMT StmtH_Delete;

/* データ操作ハンドルの割当て */
ShunAllocHandle( ConH, &StmtH_Search );
ShunAllocHandle( ConH, &StmtH_Delete );

/* ダイレクトアクセスキーによる検索を実行 */
pKey[0].Key = "20061101,00000001";
pKey[0].Key_Len = strlen( pKey[0].Key );
ShunSearchKey( StmtH_Search, "key1", SHUN_KEY_COMPLETE_MATCH, 1, pKey, "/",
               &Return_Cnt, &Rec_Id_Out, &Data, &Key_Out );

/* レコードIDによる削除を実行 */
if ( Return_Cnt > 0 ) {
  ShunDeleteRecId( StmtH_Delete, Return_Cnt, Rec_Id_Out);
}

/* データ操作ハンドルの解放 */
ShunFreeHandle( StmtH_Search );
ShunFreeHandle( StmtH_Delete );

ダイレクト検索を使用してデータ更新を行う場合の記述例

/*以下のように用意されていることを仮定しています           */
/* pKey       :ダイレクトアクセスキーを設定する構造体配列 */

SHUNHSTMT StmtH_Search;
SHUNHSTMT StmtH_Update;

/* データ操作ハンドルの割当て */
ShunAllocHandle( ConH, &StmtH_Search );
ShunAllocHandle( ConH, &StmtH_Update );

/* ダイレクトアクセスキーによる検索を実行 */
pKey[0].Key = "20061101,00000001";
pKey[0].Key_Len = strlen( pKey[0].Key );
ShunSearchKey( StmtH_Update, "key1", SHUN_KEY_COMPLETE_MATCH, 1, pKey, "/",
               &Return_Cnt, &Rec_Id_Out, &Data, &Key_Out);

/* レコードIDによる更新を実行 */
if ( Return_Cnt > 0 ) {
  ShunUpdateRecId( StmtH_Update, Return_Cnt, Rec_Id_Out, updateData );
}

/* データ操作ハンドルの解放 */
ShunFreeHandle( StmtH_Search );
ShunFreeHandle( StmtH_Update );