在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. {
  3. Baby baby=PM.GetObjectById(“30~61”);
  4. return baby;
  5. }
  6. Catch(Exception e)
  7. {
  8. return null;
  9. }

这样,有这个数据返回该记录没有则返回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. {
  3. PersistenceManager pm = PMF.get().getPersistenceManager();
  4. Query query = pm.newQuery(queryString);
  5. @SuppressWarnings("unchecked")
  6. List<Baby> babys = (List<Baby>) query.execute();
  7. pm.close();
  8. return babys;
  9. }

我在另一处调用

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

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

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

转载于:https://www.cnblogs.com/wencansz/archive/2012/11/12/2766802.html

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

  1. Google App Engine技术架构之Google App Engine的简介

    通过前面两篇Google的核心技术和Google整体架构猜想,大家应该对Google强大的基础设施有一定的了解.本篇开始介绍构筑在这强大基础设施之上的Google App Engine. Google ...

  2. 使用 Grails 开发 Google App Engine 应用

    Grails 作为 Web 框架的新生力量,已经被越来越多的开发人员所接受.而 Google App Engine(以下简称 GAE)作为云计算的平台,为应用提供了广阔的扩展空间.如何将二者擦出绚丽的 ...

  3. 探索Google App Engine背后的奥秘(3)- Google App Engine的简介

    通过前面两篇介绍,大家应该对Google强大的基础设施有一定的了解.本篇开始介绍构筑在这强大基础设施之上的Google App Engine. Google App Engine的介绍 由于发布S3和 ...

  4. 谁更胜一筹:技术解析 Google App Engine 和 Amazon EC2

    最近一个潜在客户要求我们比较一下 Amazon EC2 和 Google App Engine,正好我们刚刚在 EC2 和 Google App Engine 上完成了两个相对来说规模较大的项目,因此 ...

  5. Google App Engine对抗Amazon EC2谁更牛?

    导读:笔者根据最近完成的一个项目,并帮助潜在客户比较Amazon EC2和Google App Engine,他将从三个角度来对比这两大云计算平台:技术.业务和未来发展趋势. 关键词:Amazon E ...

  6. 探索Google App Engine背后的奥秘

    探索Google App Engine背后的奥秘(1)--Google的核心技术 作者: ikewu | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明 网址: http://w ...

  7. 探索Google App Engine背后的奥秘(3)- Google App Engine的简介(转载)

    作者:  ikewu  | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明 网址:  http://www.dbanotes.net/arch/google_app_engine ...

  8. 闭关纪要17.Google app engine的简单应用

    在上面用了十一篇博客的文章详细的介绍了,Step1账户登录系统之后,从现在开始,继续写闭关纪要,因为Step1账户登录系统也是闭关工作的一部分,因此保留序号,这篇纪要在上次的闭关纪要5.WML,UTF ...

  9. Google App Engine技术架构之Google App Engine架构

    上一篇我们介绍了Google App Engine的基本信息,本篇将首先介绍App Engine的一些设计理念,接着将对App Engine的组成部分等进行介绍. 设计理念 App Engine在设计 ...

最新文章

  1. 综合技术 --@Autowired和@Resource
  2. Ember 3.9 发布,3.8 升级为 LTS
  3. c 多文件全局变量_C语言开发单片机为啥都是全局变量形式?
  4. Java 动态加载类
  5. 万分之二用百分之怎么表示_红木家具怎么辨别真假
  6. PHP 读取JSON数据
  7. irule jar包无法导入_poi表格的导入导出
  8. Android: android 如何预置APK
  9. java遍历范型list_Java 集合(1)-- 俯瞰 Java 集合源码以及分类
  10. Android-动画-view 动画笔记
  11. VM虚拟机装Windows2000成功后VM Tools失败解决方法
  12. 微星笔记本u启动安装win10系统
  13. 童年经典,任天堂switch红白机游戏
  14. 2018中国民营企业500强榜单
  15. 【flutter】整合高德地图amap_base
  16. 爬虫练习:爬取网易云音乐热歌榜全部歌曲的热门评论
  17. 基于ZYNQ的光纤-以太网高速传输系统设计
  18. [技术讨论]为什么运算放大器有共模输入电压范围限制呢,详解在这里
  19. 修改PPT输出JPG图片分辨率为300 dpi
  20. mysql数据库引擎(show engines)

热门文章

  1. Spring的核心思想,总结得非常好!
  2. Spring Boot自动配置原理、实战
  3. RESTful Web 服务 - 消息
  4. eclipse中提交git总是要求输入用户名、密码
  5. 【Python】青少年蓝桥杯_每日一题_12.19_输出三位数
  6. 什么是脱离文档流?什么是文档流?
  7. 无符号 byte java_我们能用Java做无符号字节吗?
  8. android 上滑隐藏view,Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)
  9. xml配置linux启动脚本,linux中利用Shell脚本实现自动安装部署weblogic服务
  10. 国家发改委:分两批在8个地区建设全国一体化算力网络国家枢纽节点