Java (JDO)でGoogle App Engineのデータストアにアクセスする(2)

前記事に引き続いて、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(); // 結果が更新される
    
カテゴリー: Tips タグ: , , パーマリンク