https://hacknote.jp/archives/6276/
でDatastoreに接続したあとは以下のようにしてSELECT文を発行できます。
まずはQueryを実行するためのメソッドを用意します。
なおこのメソッドではまだ以下に対応していません。
Datastoreでは1つのクエリで最大1000件までしか取得できないため、結果が1000件を超える場合はlimit offsetをつかって再帰的にデータを取得する必要があります。
/** * Run a query on the datastore. * * @return The entities returned by the query. * @throws DatastoreException * on error */ static List<Entity> runQuery(Query query) throws DatastoreException { RunQueryRequest.Builder request = RunQueryRequest.newBuilder(); request.setQuery(query); RunQueryResponse response = datastore.runQuery(request.build()); if (response.getBatch().getMoreResults() == QueryResultBatch.MoreResultsType.NOT_FINISHED) { // @todo 再帰処理 } List<EntityResult> results = response.getBatch().getEntityResultList(); List<Entity> entities = new ArrayList<Entity>(results.size()); for (EntityResult result : results) { entities.add(result.getEntity()); } return entities; }
このメソッドを呼ぶ方法は以下のようにします。
setNameで該当するテーブルを指定します。
1000件を超えるデータに対応するためにはlimit,offsetを指定しておいたほうがいいでしょう。
/** * @return * @throws DatastoreException */ private static List<Entity> listHoges() throws DatastoreException { Query.Builder query = Query.newBuilder(); query.addKindBuilder().setName("hoge"); // @todo ソート処理 return runQuery(query.build()); }