关于开源世界里的面向对象数据库db4o(3)
作者:佚名; 更新时间:2014-12-05
而SODA也有其它两种查询不可比拟的优势,那就是使你的应用程序能够动态生成查询,这种情况也是我们在应用开发中所需要的。
看一看由QBE查询转换为SODA的例子,想得到所有车手的对象信息,对于查询的约束为Student类对象。
Query query = db.Query();
query.Constrain(typeof(Student));
ObjectSet result = query.Execute();
ListResult(result);
为了通过学生姓名字进行查询,我们需要扩展上述约束条使其包含待查询对象的” name”字段的相应字符串。
Query query = db.Query();
query.Constrain(typeof(Student));
query.Descend("_name").Constrain("Liming");
ObjectSet result = query.Execute();
ListResult(result);
现在对db4o数据库的查询工作做一个总结。我们可以通过其提供的三种方式中的任意一种来完成。对于何时采用哪种方式进行查询,我们的建议是:
(1)NQ作为db4o主要的查询接口将是我们不二的首选;
(2)当前版本中对NQ查询的优化操作总是以SODA方式来执行的,因此SODA可以作为系统优化的一种途径,同时它总是用来在运行时动态的生成查询。
(3)QBE对于初学者来说将是很好的选择,当然它在功能上会有些限制,如果你喜欢的话有时对的应用还是很适合的。
6 更新对象
更新对象跟存储它们一样简单,实际上我们只需要把更改后的对象在存入数据库中就可以了。即再次调用同样的方法Set()方法就可以了。
ObjectSet result = db.Get(new Student("Liming", 0));
Student stu= (Student)result.Next();
stu.AddPoints(11);
db.Set(found);
Console.WriteLine("Added 11 points for {0}", stu.ToString());
请注意,在调用Set()方法更新对象之前我们先进行了查询,这一点十分重要。这是因为如果在当前的存储或加载操作过程所处的会话中对象对于db4o不可知的话,db4o将会向数据库中插入一个新的对象,之所以会这样是因为db4o不会自动的去匹配先前存储于数据库的对象,而是假设你向数据库中存入第二个拥有相同属性的对象。
7 删除对象
删除数据库中的对象使用的方法是Delete()方法。
ObjectSet result = db.Get(new Student("Liming", 0));
Student stu= (Student)result.Next();
db. Delete (stu);
8 结语
Db4o面向对象数据库与传统数据模型相比较,优势体现在:一是Db4o对数据语义的扩展更大,通过允许定义任何复杂的数据类型和提供与数据相关联的行为。这种语义更接近于面向对象程序设计语言的语义。二是面向对象技术强调与数据相关的软件的组织而不是强调控制流,从而把程序员的注意力转向数据库设计者的意图,面向对象语言和面向对象数据库相互形成互补,并且又保持了各自的长处。三是Db4o在功能方面与关系数据库有很大的区别。关系数据库,如SQL Sever在运行时根据存在表中的数据集而导出一个虚结构。Db4o数据库本身含有对象。四是Db4o是一种主动型数据库,而一个关系数据库则是被动型的数据库。关系数据库主要提供的是增删记录的能力,而面向对象数据库提供了在对象中嵌入方法的能力。因而,Db4o数据库可以嵌入很多的操作,而在关系数据库中,这些操作需要应用程序来实现。五是Db4o新引入的抽象、扩充类型定义、用户自定义操作以及支持版本规模型演化等概念和功能,消除了传统数据库对数据定义的一致性,提供了更为丰富的语义。
参考文献:
[1]Object-oriented database programming with db4o[EB/OL].
[2]DB4O 国内翻译的部分资料——Asp.Net Forums [EB/OL].?PostID=30860
[3]王意洁 编著.面向对象的数据库技术 [M].电子工业出版社,2005
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
,信捷职称论文写作发表网
热门论文