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にしてみてください。
●プログラム・リスト●
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)プログラミング入門」に戻る