ダイレクト検索を使用したレコード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 ); |