我正在使用Google App Engine,并尝试从数据存储区查询/提取数据。我遵循了将近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时,显然是在拉进正确的Entity,与显示的图片匹配。另外,当我打印出键时,它也匹配
(这样的事情:对于keys.get(i).toString();-实体[!global:Coupon(123)/ Coupon(no-id-yet)] :.或:密钥字符串=!global:Coupon (5730827476402176)
我已尽力遵循了文档(此处)和一些示例(此处),但似乎无法弄清楚。在拥有实体后不返回空值的情况下,是否有人对如何从实体获取属性有任何建议或经验?
我经历了以下Stackoverflow问题,但均未获得任何成功,因此请不要在其上使用简单的重复问号来结束此问题:1)如何获取Google App Engine(低级API)中的所有子实体2)存储分层数据在Google App Engine数据存储区中?3)如何使用Java使用Google App Engine数据存储区中的列表属性?4)Google App Engine数据存储区中的批量更新5)检查实体在Google App Engine数据存储区中是否存在实体。。
尤里卡!非常感谢所有回答。Patrice和user2649908特别感谢您,因为您带我找到了答案。
因此,Patrice是完全正确的,因为我正在查询以获取密钥,构建新实体,然后尝试解析新创建的(空)实体。
解决方案是利用PersistenceManager解析数据,然后使用getter / accessor方法进行解析。持久性管理器的链接(我或多或少只是从它的完美复制中直接复制了)在这里:如何使用JDO持久性管理器?
设置持久性管理器后,便可以使用以下代码来获取数据:
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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句