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();
}
}
| << 前へ |