Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java从Google App Engine数据存储中的实体提取属性_Java_Google App Engine_Entity_Google Cloud Datastore_Gql - Fatal编程技术网

如何使用Java从Google App Engine数据存储中的实体提取属性

如何使用Java从Google App Engine数据存储中的实体提取属性,java,google-app-engine,entity,google-cloud-datastore,gql,Java,Google App Engine,Entity,Google Cloud Datastore,Gql,我正在使用谷歌应用程序引擎,试图从数据存储中查询/提取数据。我已经学习了近20种不同的教程,但没有任何运气 下面是我的数据存储的图片以及我存储在其中的各个示例数据: 以下是我必须提取数据的一些代码: //To obtain the keys final DatastoreService dss=DatastoreServiceFactory.getDatastoreService(); final Query query=new Query("Coupon"); List<Key>

我正在使用谷歌应用程序引擎,试图从数据存储中查询/提取数据。我已经学习了近20种不同的教程,但没有任何运气

下面是我的数据存储的图片以及我存储在其中的各个示例数据:

以下是我必须提取数据的一些代码:

//To obtain the keys
final DatastoreService dss=DatastoreServiceFactory.getDatastoreService();
final Query query=new Query("Coupon");
List<Key> keys = new ArrayList<Key>();

//Put the keys into a list for iteration
for (final Entity entity : dss.prepare(query).asIterable(FetchOptions.Builder.withLimit(100000))) {
    keys.add(entity.getKey());
}

try {
    for (int i = 0; i < keys.size(); i++){
        Entity myEntity = new Entity("Coupon", keys.get(i));

        System.out.println("Size of the Keys array = " + keys.size());

        String description = (String) myEntity.getProperty("desc");

        String endDate = (String) myEntity.getProperty("endDate");

        System.out.println("Description = " + description);
        System.out.println("End Date: " + endDate);

        //Map here is empty...
        Map<String, Object> test = myEntity.getProperties();

        System.out.println("MAP SIZE = " + test.size());        
    }
} catch (Exception e){
    e.printStackTrace();
}

    **OUPUT:** 
    Size of the Keys array = 2
    Description = null
    End date = null
    MAP SIZE = 0
我不知道为什么描述和结束日期为空。很明显,它正在拉入正确的实体,如图2所示,这与所示的图片相匹配。而且,当我打印出密钥时,它也匹配

类似这样的内容:对于keys.geti.toString;-实体[!全局:Coupon123/Couponno id]: . 或:键字符串=!全球:Coupon5730827476402176

我已经尽我所能地遵循了文档和一些示例,但我似乎无法理解它。有没有人对如何从实体中获取属性有过任何建议或经验,而这些属性不返回null

我已经完成了以下Stackoverflow问题,但没有任何成功,因此请不要使用简单的重复问题标记来结束此问题: 1. 2. 3. 4. 5.

你试过这个吗

//Put the keys into a list for iteration
for (final Entity entity : dss.prepare(query).asIterable   (FetchOptions.Builder.withLimit(100000))) {


String description = (String) entity.getProperty("desc");

    String endDate = (String) entity.getProperty("endDate");

    System.out.println("Description = " + description);
    System.out.println("End Date: " + endDate);
}

在您的示例中,您正在创建实体,预期属性将为空!非常感谢你的回答。特别感谢你引导我找到答案

因此,Patrice是完全正确的,因为我正在查询以获取密钥,构建一个新实体,然后尝试解析新创建的空实体

解决方案是利用PersistenceManager解析数据,然后使用getter/accessor方法来解析数据。持久性管理器的链接在这里,我或多或少是直接从中复制的,因为它工作得很好:

设置持久性管理器后,我可以使用以下代码让它提取数据:

try {
            for (int i = 0; i < keys.size(); i++){

                //See the link for How to use JDO persistence manager on how to use this
                PersistenceManager pm = MyPersistenceManagerClass.getPM();

                //Need to cast it here because it returns an object
                Coupon coupon = (Coupon) pm.getObjectById(Coupon.class, keys.get(i));

                System.out.println("Created by = " + coupon.getCreatedBy());

                System.out.println("Description = " + coupon.getDesc());

                System.out.println("Modified by = " + coupon.getModifiedBy());
            }
        } catch (Exception e){
            e.printStackTrace();
        }

正常的方法似乎是使用getProperty,然后命名属性,而不是getPropertiesIndeed you's right,代码中的行:myEntity.getPropertydesc;正在尝试执行此操作,但返回null。我尝试了地图测试的getProperties调用,但也没有成功。哦,哇,我错过了那个。对不起,我很抱歉:P我下次一定要把代码通读一遍,不要只看一行。你什么时候把你的实体放进去?我们能完全排除最终的一致性吗?我想我知道你在做什么。您正在执行一个查询以获取所有键,然后使用相同的键构建一个新实体,使其为空实体,然后请求该新实体的参数。您决不会要求使用服务器返回的实体;这是一个很好的想法,但不幸的是,问题围绕着我,我有一个空的物体。我更新了代码以显示我提出的解决方案