Google App Engine平台下JDOQL查询报异常的问题解决方案

简介:

 java应用程序开发中使用JDO数据存储的方式,里面涉及到以对象为基础建立永久性数据。看不到数据库文件也看不到表,只有自定义的实体类,存储的方式也很简单,定义一个实体类,然后将其属性赋值,然后调用PersistenceManager 提供的方法存储这个对象即可。但是在数据的查询过程中却是伤透脑筋。以下是我近几天遇到的问题和自己琢磨的解决方案,其中Baby是我定义的实体类。

1.执行GetObjectById()抛出异常 Could not retrieve entity of kind Baby with key Baby("31~60")”其中Baby是我定义的实体类,30~61是我传递的一个作为Id的参数。一直以为哪里的代码出现问题了或者参数的格式不对等问题,经反复试验才知道。这就是GetObjectById()这个方法本身的问题。不像SQL中传入个Id查询有则返回这个对象,没有则返回空,JDO中的数据查询是传入的Id必须能查到数据,若没有就抛出上述异常。

 

解决方案:GetObjectById()方法用try/catch括起来,形如:

 
  1. try 
  2.    Baby baby=PM.GetObjectById(“30~61”); 
  3.    return baby; 
  4. Catch(Exception e) 
  5.    return null

这样,有这个数据返回该记录没有则返回null

2.执行newQuery()抛出类型转换错误

具体英文我忘了,意思就是说意思就是说无法将Baby集合转换成Baby类型,也就是List<Baby>无法转换成Baby类型。SQL中可能根据一条查询语句”select * from Baby where Id=’31~60’”调用方法返回的可以转换成Baby对象,可是JDO中调用newQuery()不管传入的查询语句参数是什么,都会返回一个List<Object>类型。

解决方案 : 调用 newQuery() 就将其结果赋值一个 List<Object> 的变量吧。

3. 执行newQuery()方法抛出” Object Manager has been closed”的异常

这是位于DataServer类中的查询方法代码:

 
  1. public static List<Baby> GetBabyInfoList(String queryString)  
  2.    PersistenceManager pm = PMF.get().getPersistenceManager(); 
  3.    Query query = pm.newQuery(queryString); 
  4.    @SuppressWarnings("unchecked"
  5.    List<Baby> babys = (List<Baby>) query.execute(); 
  6.    pm.close(); 
  7.    return babys; 

我在另一处调用

 
  1. String queryStr=”select from Baby”; 
  2. List<Baby> babies=DataServer.GetBabyInfoList(queryStr); 

结果一运行就抛那个异常了。原因就是GetBabyInfoList方法中的pm.close();,将这句去掉就OK了,了解JDO的人士可能会说将实体类定义成可分离的再在代码中加句pm.setDetachAllOnCommit(true);。事实无情的告诉你,不行!

解决方案:去掉方法中在返回对象前的pm.close();语句。


本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/651975,如需转载请自行联系原作者

相关文章
|
1月前
|
传感器 人工智能 监控
Uni-app智慧工地数据大屏可视化监管平台源码带APP
智慧工地的核心是数字化,它通过传感器、监控设备、智能终端等技术手段,实现对工地各个环节的实时数据采集和传输,如环境温度、湿度、噪音等数据信息,将数据汇集到云端进行处理和分析,生成各种报表、图表和预警信息,帮助管理人员了解工地的实时状况,及时做出决策和调整,
53 0
|
3月前
|
数据可视化 定位技术 Sentinel
如何用Google Earth Engine快速、大量下载遥感影像数据?
【2月更文挑战第9天】本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,批量下载指定时间范围、空间范围的遥感影像数据(包括Landsat、Sentinel等)的方法~
659 0
如何用Google Earth Engine快速、大量下载遥感影像数据?
|
3月前
|
人工智能 监控 安全
java基于微服务架构的智慧工地监管平台源码带APP
劳务管理: 工种管理、分包商管理、信息采集、班组管理、花名册、零工采集、 现场统计、考勤管理、考勤明细、工资管理、零工签证
289 4
|
3月前
|
编解码 人工智能 算法
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
33 0
|
3月前
|
编解码 人工智能 数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
48 0
|
3月前
|
机器学习/深度学习 算法 数据可视化
基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP
基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP
112 0
|
1月前
|
监控 数据可视化 安全
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
环境实时数据、动态监测报警,实时监控施工环境状态,有针对性地预防施工过程中的环境污染问题,打造文明生态施工,创造绿色的生态环境。
16 0
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
游戏直播APP平台开发多少钱成本:定制与成品源码差距这么大
开发一款游戏直播APP平台所需的费用是多少?对于计划投身这一领域的投资者来说,首要关心的问题之一就是。本文将探讨两种主要的开发模式——定制开发与成品源码二次开发的成本差异及其优劣势。
|
2月前
|
前端开发 Android开发 iOS开发
应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
【2月更文挑战第31天】应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
34 2
|
2月前
|
存储 编解码 数据可视化
Google Earth Engine获取随机抽样点并均匀分布在栅格的不同数值区中
【2月更文挑战第14天】本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,按照给定的地表分类数据,对每一种不同的地物类型,分别加以全球范围内随机抽样点自动批量选取的方法~
273 0
Google Earth Engine获取随机抽样点并均匀分布在栅格的不同数值区中