Récupérer des résultats de requête
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Une fois que vous avez créé une requête, vous pouvez spécifier un certain nombre d'options de récupération de façon à mieux contrôler les résultats qu'elle renvoie.
Pour en savoir plus sur la structuration des requêtes pour l'application, consultez la page Requêtes Datastore.
Récupérer une seule entité
Pour récupérer une seule entité correspondant à votre requête, utilisez la méthode PreparedQuery.asSingleEntity()
:
Cette méthode renvoie le premier résultat de l'index correspondant à la requête.
(S'il existe plusieurs résultats correspondants, une exception TooManyResultsException
est générée.)
Appliquer une itération aux résultats de la requête
Lors de l'itération des résultats d'une requête à l'aide des méthodes PreparedQuery.asIterable()
et PreparedQuery.asIterator()
, Cloud Datastore récupère les résultats par lots. Par défaut, chaque lot contient 20 résultats, mais vous pouvez modifier cette valeur à l'aide de FetchOptions.chunkSize()
. Vous pouvez continuer à appliquer l'itération aux résultats de la requête jusqu'à ce que tous les résultats soient renvoyés ou jusqu'à l'expiration de la requête.
Récupérer certaines propriétés d'une entité
Pour ne récupérer que certaines propriétés d'une entité plutôt que l'entité entière, utilisez une requête de projection. Ce type de requête s'exécute plus rapidement et coûte moins cher qu'une requête renvoyant des entités entières.
De même, une requête ne contenant que des clés permet de gagner du temps et d'économiser des ressources en ne renvoyant que les clés aux entités auxquelles elle correspond, plutôt que les entités entières elles-mêmes. Pour créer ce type de requête, utilisez la méthode Query.setKeysOnly()
:
Définir une limite pour la requête
Vous pouvez spécifier une limite pour la requête afin de contrôler le nombre maximal de résultats renvoyés dans un lot. L'exemple suivant récupère les cinq personnes les plus grandes depuis Cloud Datastore :
Étape suivante
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/09/04 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/09/04 (UTC)."],[[["\u003cp\u003eThis API supports first-generation runtimes and is applicable when upgrading to corresponding second-generation runtimes, while migration to Java 11/17 runtimes requires referring to a specific migration guide.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003ePreparedQuery.asSingleEntity()\u003c/code\u003e retrieves a single entity matching a query, throwing a \u003ccode\u003eTooManyResultsException\u003c/code\u003e if multiple matches exist.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003ePreparedQuery.asIterable()\u003c/code\u003e and \u003ccode\u003ePreparedQuery.asIterator()\u003c/code\u003e allow iterating through query results in batches, with the batch size adjustable via \u003ccode\u003eFetchOptions.chunkSize()\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eProjection queries retrieve only selected properties, and keys-only queries retrieve only keys, both being faster and less resource-intensive than full-entity queries.\u003c/p\u003e\n"],["\u003cp\u003eA limit can be set on queries to control the maximum number of results, as demonstrated in the example that retrieves the five tallest people.\u003c/p\u003e\n"]]],[],null,["# Retrieving query results\n\n| This API is supported for first-generation runtimes and can be used when [upgrading to corresponding second-generation runtimes](/appengine/docs/standard/\n| java-gen2\n|\n| /services/access). If you are updating to the App Engine Java 11/17 runtime, refer to the [migration guide](/appengine/migration-center/standard/migrate-to-second-gen/java-differences) to learn about your migration options for legacy bundled services.\n\nAfter constructing a query, you can specify a number of retrieval options to\nfurther control the results it returns.\nSee [datastore queries](/appengine/docs/legacy/standard/java/datastore/queries) for more information on structuring queries for your app.\n\nRetrieving a single entity\n--------------------------\n\n\u003cbr /\u003e\n\nTo retrieve just a single entity matching your query, use the method [`PreparedQuery.asSingleEntity()`](/appengine/docs/legacy/standard/java/javadoc/com/google/appengine/api/datastore/PreparedQuery#asSingleEntity--): \n\n Query q =\n new Query(\"Person\")\n .setFilter(new FilterPredicate(\"lastName\", FilterOperator.EQUAL, targetLastName));\n\n PreparedQuery pq = datastore.prepare(q);\n Entity result = pq.asSingleEntity();\n\nThis returns the first result found in the index that matches the query.\n\n(If there is more than one matching result, it throws a [`TooManyResultsException`](/appengine/docs/legacy/standard/java/javadoc/com/google/appengine/api/datastore/PreparedQuery.TooManyResultsException).)\n\n\nIterating through query results\n-------------------------------\n\nWhen iterating through the results of a query using the [`PreparedQuery.asIterable()`](/appengine/docs/legacy/standard/java/javadoc/com/google/appengine/api/datastore/PreparedQuery#asIterable()) and [`PreparedQuery.asIterator()`](/appengine/docs/legacy/standard/java/javadoc/com/google/appengine/api/datastore/PreparedQuery#asiterator_1) methods, Cloud Datastore retrieves the results in batches. By default each batch contains 20 results, but you can change this value using [`FetchOptions.chunkSize()`](/appengine/docs/legacy/standard/java/javadoc/com/google/appengine/api/datastore/FetchOptions#chunksize). You can continue iterating through query results until all are returned or the request times out.\n\nRetrieving selected properties from an entity\n---------------------------------------------\n\nTo retrieve only selected properties of an entity rather than the entire entity, use a [*projection query*](/appengine/docs/legacy/standard/java/datastore/projectionqueries). This type of query runs faster and costs less than one that returns complete entities.\n\nSimilarly, a [*keys-only query*](/appengine/docs/legacy/standard/java/datastore/queries#keys-only_queries) saves time and resources by returning just the keys to the entities it matches, rather than the full entities themselves. To create this type of query, use the [`Query.setKeysOnly()`](/appengine/docs/legacy/standard/java/javadoc/com/google/appengine/api/datastore/Query#setkeysonly) method: \n\n Query q = new Query(\"Person\").setKeysOnly();\n\nSetting a limit for your query\n------------------------------\n\nYou can specify a *limit* for your query to control the maximum number of results returned in one batch. The following example retrieves the five tallest people from Cloud Datastore: \n\n private List\u003cEntity\u003e getTallestPeople() {\n DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();\n\n Query q = new Query(\"Person\").addSort(\"height\", SortDirection.DESCENDING);\n\n PreparedQuery pq = datastore.prepare(q);\n return pq.asList(FetchOptions.Builder.withLimit(5));\n }\n\nWhat's next?\n------------\n\n- Learn the [common restrictions](/appengine/docs/legacy/standard/java/datastore/query-restrictions) for queries on Cloud Datastore.\n- Learn about [query cursors](/appengine/docs/legacy/standard/java/datastore/query-cursors), which allow an application to retrieve a query's results in convenient batches.\n- [Understand data consistency](/appengine/docs/legacy/standard/java/datastore/data-consistency) and how data consistency works with different types of queries on Cloud Datastore.\n- Learn the [basic syntax and structure of queries](/appengine/docs/legacy/standard/java/datastore/queries) for Cloud Datastore."]]