| Interstage Shunsaku Data Manager アプリケーション開発ガイド - Microsoft(R) Windows(R) 2000/ Microsoft(R) Windows Server(TM) 2003 - - UNIX共通 - |
目次
索引
![]()
|
| 第2部 APIでのアプリケーション開発 | > 第9章 Java APIのアプリケーション開発 | > 9.3 Java APIの使用方法 | > 9.3.2 データの検索 |
Webアプリケーションでは、検索した結果を一定件数ごとに区切って、前後に連続したデータを取得したい場合があります。
このような場合、setRequestメソッドのパラメタである取得開始位置、または、取得終了位置に、その直前の検索処理によって取得した最終位置情報、または、先頭位置情報を指定してXML文書を連続して取得します。
条件に一致するXML文書を連続して取得する場合の流れについて、以下の図に示します。

String queryExpression = "/document/base/prefecture == '大阪'";
String returnExpression = "/document/base/name, /document/base/price";
String sortExpression = "val(/document/base/price/text()) DESC";
ShunConnection con = new ShunConnection();
ShunPreparedStatement pstmt = con.prepareSearch(queryExpression, returnExpression);
pstmt.setSort(sortExpression);
//取出し方向
int direction = 0;
// 先頭位置情報
String sFirstPos = null;
// 最終位置情報
String sLastPos = null;
// どのページを表示するかによってsetRequestの設定を変更
// 次のページを表示する場合は directionがNEXT、前のページを表示する場合は directionがPREVとする
if(direction == NEXT) {
// 次のページを表示する場合 (2)
pstmt.setRequest(sLastPos, 30, pstmt.SHUN_DIRECTION_FORWARD_EXCLUSIVE);
}else if(direction == PREV) {
// 前のページを表示する場合 (3)
pstmt.setRequest(sFirstPos, 30, pstmt.SHUN_DIRECTION_BACKWARD_EXCLUSIVE);
}else{
// 最初のページを表示する場合 (1)
pstmt.setRequest(null, 30, 0);
}
// 検索の実行 (4)
ShunResultSet rs = pstmt.executeSearch();
// 検索した結果の取出し (5)
System.out.println("[ヒット件数] = " + rs.getHitCount());
while(rs.next()) {
System.out.println("[検索結果] = " + rs.getString());
}
// 先頭位置情報と最終位置情報を格納 (6)
sFirstPos = rs.getFirstPosition();
sLastPos = rs.getLastPosition();
// ShunResultSetオブジェクトの解放 (7)
// ShunPreparedStatementオブジェクトの解放
rs.close();
pstmt.close();
con.close();
|
setRequestメソッドにデータの取得位置と返信要求件数を指定します。 最初のページを表示する検索処理では、最初のデータから取出しを行うため、データの取得位置(取得開始位置または取得終了位置)にはnullを指定します。取得位置にnullを指定すると、1件目からデータを取り出します。
setRequestメソッドにデータの取得位置、返信要求件数および取出し方向を指定します。 次のページを表示する検索処理では、前回検索時の最終位置情報をgetLastPositionメソッドで取得しておき、データの取得位置(取得開始位置)に指定します。この指定により前回取得したデータの続きのデータを取得します。
setRequestメソッドにデータの取得位置、返信要求件数および取出し方向を指定します。 前のページを表示する検索処理では、前回検索時の先頭位置情報をgetFirstPositionメソッドで取得しておき、データの取得位置(取得終了位置)に指定します。この指定により前回取得したデータの前の部分のデータを取得します。
executeSearchメソッドで検索を実行します。検索した結果としてShunResultSetオブジェクトが作成されます。
ShunResultSetオブジェクトとShunPreparedStatementオブジェクトは、使用後にそれぞれのcloseメソッドで必ず解放します。
// 次のページのデータの検索
public void next(DispatchContext context, shunProduct.ShunProductBean dataBean) {
execute(context, dataBean, ShunAccessController.FORWARD);
}
// 前のページのデータの検索
public void back(DispatchContext context, shunProduct.ShunProductBean dataBean) {
execute(context, dataBean, ShunAccessController.BACKWARD);
}
// 検索実行
private void execute(DispatchContext context, shunProduct.ShunProductBean dataBean, int direction)
{
String key = dataBean.getKey();
ShunConnection connection = null;
ShunsakuAccessController accessController = null;
:
//Shunsakuサーバへ接続
connection = new ShunConnection("localhost", 33101);
accessController = new ShunsakuAccessController(connection);
//検索の準備
accessController.search(key);
//データの取得位置を取得
String dataPosition = null;
if(direction == ShunsakuAccessController.FORWARD)
{
dataPosition = dataBean.getLastPosition();
}
else if(direction == ShunsakuAccessController.BACKWARD)
{
dataPosition = dataBean.getFirstPosition();
}
//検索を実行
Object[] resultData = accessController.getResultData(ShunAccessController.SORT_1, dataPosition, 30, direction);
int hit = resultData.length;
//データBeanに、ヒット件数、取得開始位置、取得終了位置を設定
dataBean.setHitCount(hit);
dataBean.setFirstPosition(accessController.getFirstPosition());
dataBean.setLastPosition(accessController.getLastPosition());
accessController.close();
connection.close();
:
//結果データを作成、設定し、次の画面へ遷移
ShunProductListModel listData = new ShunProductListModel(resultData);
dataBean.setResultList(listData);
dataBean.setVerb("output");
context.setResponseBean("body", dataBean);
:
} |
public class ShunsakuAccessController {
:
public static final String SORT_NONE = ""l;
public static final String SORT_1 = "val(/document/base/price/text()) DESC";
:
} |
public void search(String keys) throws ShunException {
:
queryString = "/document/base/prefecture == '" + keys + "'";
returnString = "/";
:
getPreparedStatement(queryString, returnString);
:
}
private void getPreparedStatement(String queryString, String returnString)
{
:
pstmt = con.preparedSearch(queryString, returnString);
:
}
public Object[] getResultData(String sortString, String dataPosition, int requestCount, int direction)throws ShunException
{
ShunResultSet resultSet;
Object[] resultData = null;
// 検索の実行
resultSet = getResultSet(sortString, dataPosition,requestCount,direction);
this.lastPosition = resultSet.getLastPosition();
this.firstPosition = resultSet.getFirstPosition();
:
resultData = parseResultSet(resultSet);
:
return resultData;
}
public ShunResultSet getResultSet(String sortString, String dataPosition, int requestCount, int direction)throws ShunException
{
ShunResultSet resultSet;
Object[] resultData = null;
//ソート式を指定
if (!sortString.equals(SORT_NON)) {
this.fPreparedStatement.setSort(sortString);
}
//返信要求件数を設定
this.fPreparedStatement.setRequest(dataPosition, requestCount, direction);
//検索を実行し、ShunResultSetオブジェクトを作成
return this.fPreparedStatement.executeSearch();
}
public String getFirstPosition()
{
return firstPosition;
}
public String getLastPosition()
{
return lastPosition;
} |
目次
索引
![]()
|