前記事に引き続いて、Java/JDOでGAEのデータストアにアクセスする。今回は「クエリを使ってデータストアからエンティティを取得」し、「内容を更新して格納」する部分を実装してみる。
- PersistenceManagerをインスタンス化する
// Java PersistenceManager pm=PMF.get().getPersistenceManager();
ここはお約束の部分。
- クエリを準備する
一番低レベルのクエリでは、SQLにほぼ同じ構文で書くことができる。例えば、kind名:SpotPlanから、property名:chk_statusの値が’plan’のentityを抽出するには、以下のように書けばOK。// Java String query = "select from " + SpotPlan.class.getName() + " where chk_status =='plan'"; // さらに検索条件を追加 String query = "select from " + SpotPlan.class.getName() + " where chk_status =='plan' & chk_mode=='auto'";
ポイント:
・対象となるkind名(=クラス名)は、クラス名.class.getName() とすれば得られる。
・「等しい」を表わす符号は「==」。
・複数の条件を記述する際は「&」でつなぐ。
・「大きい」「小さい」などの条件比較は、1つのクエリで1つのみ。 - クエリを初期化し実行する
PersistenceManager のnewQuery()メソッドでクエリを作成し、execute()メソッドでそのクエリを実行する。// Java // クエリ実行結果をSpotPlanのListにキャストする List<SpotPlan> plans = (List<SpotPlan>)pm.newQuery(query).execute();
- 結果を処理する
SpotPlanクラスのgetterを使って、プロパティ’spot_time’と’spot_name’の値を表示する例。// Java for(SpotPlan plan:plans){ resp.getWriter().println(plan.getSpot_time() + " - " + plan.getSpot_name()); }
- プロパティの値を更新する
// Java for(SpotPlan plan:plans){ //resp.getWriter().println(plan.getSpot_time() + " - " + plan.getSpot_name()); // プロパティ:chk_statusの値を'checkin'に設定する plan.setChk_status("checkin"); } pm.close(); // 結果が更新される