JDOQLによる検索について (1/4)
作成:2010-05-07 14:08
更新:2010-05-10 17:27
更新: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オブジェクトを生成し、そこから順にデータを取り出してテーブルを作って表示しているだけです。
まずは、「Query」オブジェクトを使った検索からです。JDOには、検索に関する情報を管理するQueryというオブジェクトが用意されており、これを使って細かな検索条件を指定することができます。
では、実際にやってみましょう。まずは、検索文字列を入力して送信すると、LinkDataのtitleからその文字列のデータを探して表示する、というものを作ってみます。find.htmlというWebページを作成し、下のリストのように記述をしましょう。
ここでは、findDataというJavaScript関数を用意し、これを呼び出して検索を行わせています。この関数では、「/find?find=検索文字」というようにしてfindというところにアクセスをするようにしています。ということは、findというパラメータを受け取ってオブジェクトを検索し出力するサーブレットを作成し、これを/findというアドレスに公開すれば、このサーブレットを使って検索が行われるわけですね。
callback関数は、基本的に前回までの処理とそれほど変わりありません。受け取ったJSONデータをもとにJavaScriptオブジェクトを生成し、そこから順にデータを取り出してテーブルを作って表示しているだけです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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)プログラミング入門」に戻る