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)プログラミング入門」に戻る