libro
www.tuyano.com
Google App Engine for Java(GAE/J)プログラミング入門

JDOQLによる検索について (1/4)

作成:2010-05-07 14:08
更新:2010-05-10 17:27

■オブジェクトを検索する

ここまで、データストアからデータを取得する方法として、「全オブジェクトを得る」「特定のIDのオブジェクトを得る」という2通りの方法を使ってきました。が、もっと柔軟な検索を行う必要がある場合もあるでしょう。こうした場合のために、さまざまな検索について説明しましょう。

まずは、「Query」オブジェクトを使った検索からです。JDOには、検索に関する情報を管理するQueryというオブジェクトが用意されており、これを使って細かな検索条件を指定することができます。

では、実際にやってみましょう。まずは、検索文字列を入力して送信すると、LinkDataのtitleからその文字列のデータを探して表示する、というものを作ってみます。find.htmlというWebページを作成し、下のリストのように記述をしましょう。

ここでは、findDataというJavaScript関数を用意し、これを呼び出して検索を行わせています。この関数では、「/find?find=検索文字」というようにしてfindというところにアクセスをするようにしています。ということは、findというパラメータを受け取ってオブジェクトを検索し出力するサーブレットを作成し、これを/findというアドレスに公開すれば、このサーブレットを使って検索が行われるわけですね。

callback関数は、基本的に前回までの処理とそれほど変わりありません。受け取ったJSONデータをもとにJavaScriptオブジェクトを生成し、そこから順にデータを取り出してテーブルを作って表示しているだけです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※find.htmlのソースコード

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>データの検索</title>
    <script type="text/javascript" src="lib.js"></script>
		<script type="text/javascript">
		<!--
		function findData(){
			var request = createHttpRequest();
			if (request == null){
				alert("HttpRequestが取得できませんでした。");
				return;
			}
			var str = document.getElementById("find").value;
			var uri = "/find?find=" + encodeURI(str);
			request.open("GET",uri,true);
			request.setRequestHeader("User-Agent","XMLHttpRequest");
			request.onreadystatechange = function(){
				if (request.readyState == 4 && request.status == 200){
					callback(request);
				}
			}
			request.send();
		}

		function callback(request){
			var json = eval(request.responseText);
			var res = '';
			for (var i = 0;i < json.length;i++){
				res += '<tr><td>' + json[i].id + '</td>' + 
					'<td>' + json[i].title + '</td>' +
					'<td>' + json[i].date + '</td>' + '</tr>';
			}
			var obj = document.getElementById("datatable");
			obj.innerHTML = res;
		}
		//-->
		</script>
  </head>
  <body>
    <h1>データの検索</h1>
    <table>
      <tr>
        <td>FIND:</td>
        <td><input type="text" id="find"></td>
      </tr>
      <tr>
      	<td></td>
      	<td><input type="button" value="GET" onclick="findData();"></td>
      </tr>
    </table>
		<br>
    <table id="datatable" border="1">
      <tr>
        <td>no data.</td>
      </tr>
    </table>
    <br>
   </body>
</html>


※web.xmlへの追記

<servlet>
	<servlet-name>find_data</servlet-name>
	<servlet-class>jp.tuyano.FindDataServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>find_data</servlet-name>
	<url-pattern>/find</url-pattern>
</servlet-mapping>
※関連コンテンツ

「Google App Engine for Java(GAE/J)プログラミング入門」に戻る