天天看点

BerkeleyDB-JE 使用BaseAPI(八)

本篇继续介绍Secondary Databases,主要介绍如何使用Secondary Databases。

[b] 一.读记录[/b]

从Secondary Databases中读取数据跟一般数据库中读取数据没啥两样,最大的区别在于返回的key和data是来自于Primary Database中的。例如下面的例子使用上面一篇创建的Secondary Data,根据名字来查询用户信息。

跟Database.get()方法一样,如果数据库支持重复记录,你只能获取到重复记录集的第一条记录,要想遍历所有的记录,你必须使用SecondaryCursor。

[b] 二.删除记录[/b]

一般情况下,你不能直接对Secondary Databases进行修改操作。如果你想修改Secondary Databases,你应该修改Primary Database,并且设置允许JE为你管理Secondary Databases。

但是你可以直接删除Secondary Databases中的记录,这会导致Primary Database中的相应记录被删除掉,而反过来,跟这条记录对应的Secondary Databases中的所有记录信息也会被删除掉。

这以上讨论的一切,必须是基于Primary Database是可写的。

如果数据库支持重复记录,SecondaryDatabase.delete()方法只能删除重复集中的第一条记录,要想删除全部记录,你必须使用游标。

[b]

三.使用游标(Secondary Cursors)[/b]

在Secondary Databases使用游标跟你在普通的数据库中使用游标基本上是一样的,你可以使用游标遍历重复记录集。主要的不同有两个:

1.游标返回的值是对应的存在于Primary Database中的记录值

2.SecondaryCursor.getSearchBoth() 方法将不是根据键和值来查询,而是匹配secondary key和primary key。

[b] 四.数据库连接[/b]

如果你有多个secondary databases关联到一个primary database,你可以使用join cursor来进行关联查询。实际上,就是给你了提供一种可以一次联合查询多个条件的机制。

比如说我们有一个关于用户的Primary Database有两个关联的Secondary Databases,分别是关联了性别,年龄,这时候我们想查询的是所有20岁的女性的用户信息,我们就可以使用连接来查询,步骤如下:

1.打开多个二级游标,这些游标必须从关联同一个Primary Datsbase的Secondary Database中获得。

2.定位每个游标到你想查询的位置。

3.创建一个二级游标数组,把之前创建的游标放到这个数组中去。

4.使用Database.join()得到一个连接的游标(join cursor),你要把上一步创建的游标数组传递给这个方法。

5.现在可以操作连接游标了,比如使用JoinCursor.getNext()方法可以访问下个值。

6.关闭连接游标。

7.关闭所有的二级游标。

最后,你还能为JoinCursor设置一个属性:

JoinConfig.setNoSort():指定游标的自动排序是否被禁止。默认情况下,游标会按关联最少的数据量的开始一直到关联对多数据量的。(The cursors are sorted from

the one that refers to the least number of data items to the one that refers to the most.)