Query query = manager.newQuery(LinkData.class);JDOで検索するための情報を管理するのが、Queryクラスです。このインスタンスは、PersistenceManagerの「newQuery」というメソッドで作成します。引数には、検索する対象となるクラスを指定します。
query.setFilter("title == findTitle");ここでは、titleフィールドが、送信されたパラメータのテキストと等しいものを検索します。こうした「特定の条件に符号したオブジェクトに絞り込む」というのに用いられるのが、フィルターです。これは「setFilter」というメソッドで設定します。ここでは、"title == findTitle"となっていますが、これは「titleフィールドの値がfindTitleと等しい」というのを条件に設定しているわけですね。(ここで、「findTitleっていうのは何だ?」と思うでしょうが、これはこの後で登場します)
query.setOrdering("datetime desc");ここでは、フィルターの他に、データの並び順の指定もしてみました。これは「setOrdering」というメソッドで行います。ここでは、"datetime desc"としていますが、これにより「datetimeフィールドを基準に、降順で並び替える」ということを意味します。フィルターの値は、このように、"フィールド名 asc/desc"という形で指定します。
query.declareParameters("String findTitle");最後に、パラメータを設定します。先に、setFilter("title == findTitle")のところで、findTitleという値が登場しました。このままでは、findTitleが何だかわかりません。そこで、「findTitleは、こういう値が渡されます」というパラメータの設定を行うのが、このdeclareParametersです。ここでは、"String findTitle"とすることで、findTitleにStringのパラメータが設定されるようになります。
list = (List<LinkData>)query.execute(param1);「execute」を呼び出し、Queryを実行します。このとき、引数にparam1が渡されています。このパラメータの値は、そのままdeclareParametersで指定されたfindTitleにはめ込まれて実行されます。結果は、Listインスタンスとして返されますので、後はここから必要に応じてオブジェクトを取得し、処理をしていけばいいわけです。
[Query].setRange( 開始位置 , 取得する数 )このように呼び出します。このsetRangeは、特定の位置から決まった数だけオブジェクトを取得するためのものです。SQLのlimit/offsetに相当するものと考えればわかりやすいでしょう。
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
package jp.tuyano; import java.io.*; import java.util.*; import javax.jdo.*; import javax.servlet.http.*; @SuppressWarnings("serial") public class FindDataServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { PersistenceManagerFactory factory = PMF.get(); PersistenceManager manager = factory.getPersistenceManager(); resp.setCharacterEncoding("UTF-8"); resp.setContentType("text/html"); req.setCharacterEncoding("utf-8"); String param1 = req.getParameter("find"); PrintWriter out = resp.getWriter(); List<LinkData> list = null; Query query = manager.newQuery(LinkData.class); query.setFilter("title == findTitle"); query.setOrdering("datetime desc"); query.declareParameters("String findTitle"); try { list = (List<LinkData>)query.execute(param1); } catch(JDOObjectNotFoundException e){} String res = "["; if (list != null){ for(LinkData data:list){ res += "{id:" + data.getId() + ",url:'" + data.getUrl() + "',title:'" + data.getTitle() + "',date:'" + data.getDatetime() + "',comment:'" + data.getComment() + "'},"; } } res += "]"; out.println(res); manager.close(); } }
<< 前へ | 次へ >> |