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にしてみてください。

●プログラム・リスト●

*program list*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
※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)プログラミング入門」に戻る