where id > 1このようにテキストエリアに記述して実行してみましょう。IDが1以上のデータが検索され表示されます。これは、実際には以下のようなクエリーとして実行されています。
select from jp.tuyano.LinkData where id > 1見ればわかるように、「select from モデルクラス where 条件」という形になっています。テーブルとモデルクラスの違いはあれ、基本的にはSQLとほぼ同じですね。JDOQLは、このように基本的な部分はSQLの文法をそのまま借りてきています。ですから、SQLがわかればJDOQLもほぼすぐに理解出来るようになります。
list = (List<LinkData>)manager.newQuery(query).execute();このようになっていますね。newQueryの引数に、実行するクエリーのStringを渡し、それをexecuteしています。このように、クエリーをテキストとして用意する場合には、そのテキストをnewQueryに渡すだけで、setFilterだのよけいなメソッドを呼び出し設定をする必要がありません。場合によっては、こちらのほうがはるかに簡単でしょう。
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
package jp.tuyano; import java.io.*; import java.util.*; import javax.jdo.*; import javax.servlet.http.*; @SuppressWarnings("serial") public class FindData2Servlet 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 query = "select from jp.tuyano.LinkData " + req.getParameter("find"); PrintWriter out = resp.getWriter(); List<LinkData> list = null; try { list = (List<LinkData>)manager.newQuery(query).execute(); } 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(); } }
<< 前へ |