IT学习者 | 文章大全 | 技术文档 | 桌面壁纸 | 实用查询 | 网络电台 | 成语 | 歇后语 | 网址 | 下载 | 周公解梦 | 生日密码 | 电视剧365 | Flash
 您现在的位置: IT学习者 >> 文章大全 >> 网络编程 >> Java/JSP

感受Java数据对象JDO 2.0查询语言的特点(2)

【 作者:David Jordan    来源:天极网  更新时间:2004-10-31 | 字体:

组操作(Grouping)

  统计功能可用于一个分组操作中。JDO2.0提供类似SQL中的GROUP BY和HAVING子句。Query方法:

void setGrouping(String groupSpec)

  用于指定分组的原则。groupSpec参数包含一个或多个以逗号分隔的分组表达式,还可以跟上一个以“having ”开头的过滤条件。调用此方法后,setResult()参数的每个结果表达式项必须是groupSpec中的一项,或者是groupSpec中的一项或多项的运算结果。所有groupSpec项的值均相同的结果被归在同一组中(同一条结果记录)。having子句的过滤条件可以包含boolean结果的判断语句或者是对分组表达式的统计运算。与SQL一样,having子句用于对分组后的结果集进行条件过滤。

  唯一性(Uniqueness)

  很多人一直奇怪为什么Query的执行(execute)结果是一个Object类型的对象,因为这样给开发人员造成必须手工强制将结果转换成Collection的不便。JDO1.0中查询结果一般有多个元素,但JDO专家组计划在JDO2.0中加入对返回单值结果的查询的支持,于是将Query的执行结果定义为Object类型。

  你有时会执行一个你确定结果只会有一条的查询(比如统计总数或者按具有唯一索引的会员帐号查找对象等等),在JDO2.0中,你可以调用Query方法来声明:

void setUnique(boolean unique)

  当你传入“true”后,Query执行的结果将是一个单独的值对象,如果无任何结果返回,则结果是null。如果JDO发现查询结果返回了多条记录,则会扔出一个异常。

  限制返回结果的大小

  设计用户界面的时候,我们常常会显示结果集的某一部分子集(比如分页显示或只显示前十条之类)。为了性能和效率,你多半会需要限制返回结果的范围。Query的方法可以完成这一点:

void setRange(int fromInclusive, int toExclusive)

  该方法返回的结果集只包含原结果集的第fromInclusive条到第toExclusive-1条。

  新的过滤条件操作符

  一些新的操作符被加到JDOQL中,以便执行针对引用、Map、字符串和数字的操作。instanceof操作符返回一个boolean值,可以让你过滤某个指定类的对象;同样返回boolean值的containsKey(Object)函数和containsValue(Object)用于访问Map元素。

  字符串处理方面加入了很多函数,toLowerCase()和toUpperCase()分别完成大小写转换,另外还有下列函数用于查找子串位置和获得子串:

int indexOf(String)
int indexOf(String, int) String substring(int) String substring(int,int)

  另外,String的方法:

boolean matches(String pattern)

  用于执行正则式匹配。目前只能提供有限的匹配功能。“.”和“.*”可表示通配符,而“(?i)”表示匹配不区分大小写。

  对数字型的字段,JDO2.0增加了两个函数:

Math.abs(numeric) Math.sqrt(numeric)

  预定义查询(Named Queries)

  你可以在JDO描述符(metadata)中声明常用的JDOQL查询语句,这样就不用将查询嵌入到Java源代码中。这样可以提供一些灵活性,比如将查询语句写到一个配置好的文本文件中,而需要修改时可以直接改该文件,而不用更改Java源码。描述符中的每个查询都有一个名字,而要执行某个查询时,可以使用下面的方法来创建查询:

Query newNamedQuery(Class cls, String queryName)

  JDO将会搜索描述符来找到对应的预定义查询语句并生成相应的Query对象。

  访问静态字段(static fields)

  你将可以在JDOQL中访问数据类中以public static final方式声明的常量。比如

public static final int FEMALE = 0;
public static final int MALE = 1;
public static final int UNKNOWN = 2;

  而在查询中使用类似“salary > 5000.0 && gender == MALE”的过滤条件。

  批量删除(Deletion by Query)

  在JDO1.0中,要删除一个对象,必须先将其载入内存,再删除,然而很多情况下,你在删除之前并不需要访问该对象,这样的做法比较低效。在JDO2.0中,提供了Query的几个方法来删除符合查询条件的一组对象:

Object deletePersistentAll(Object[] parameters) Object deletePersistentAll(Map parameters) Object deletePersistentAll()

  此查询结果的对象会被全部从数据库删除。这些方法返回被删除对象的集合。你的程序可以决定是否需要对被删除的对象逐个访问。如果你不访问这些对象,Query执行的性能将不会受到任何影响,换句话说,这些对象将不会在内存中生成。

相 关 文 章
相 关 软 件
没有相关下载

音乐
画心 放生 天亮了 牡丹江 那滋味 擦肩而过 放手去爱 北京欢迎你 依然在一起 吻得太逼真 牵手的右前方 坐上火车去拉萨 如果爱能早些说出来
心碎 稻香 从新爱 别碰我 魔杰座 红楼梦中 为你而活 一定要爱你 等爱的玫瑰 失落非主流 越单纯越幸福 最后一次的温柔 孤独的时候可以抱你
光荣 火花 下雨天 小酒窝 樱花草 为你写诗 无可取代 无情的温柔 寂寞才说爱 忘不掉的伤 爱上你是个错 陪你一起看草原 地球人都知道我爱你
假如 相思 女儿红 有缘人 舍不得 我的答铃 如何是好 外滩十八号 我们的纪念 摇滚怎么了 和寂寞说分手 爱上你是我的错 爱情里没有谁对谁错
加入收藏留言建议自助友情链接普通友情链接站长的Blog
版权所有   COPYRIGHT 2002-2008 ★IT学习者★ ALL RIGHTS RESERVED.