关系型数据库与面向对象的冲突

来源:互联网 发布:大华监控怎么连接网络 编辑:程序博客网 时间:2024/04/29 10:37

面向对象是从软件工程基本原则(如耦合、聚合和封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别,而Java是完全面向对象的语言,这个冲突就表现的越发明显。

对目前的J2EE信息化系统而言,通常采用面向对象分析和面向对象设计的过程。系统从需求设计到系统设计都是按面向对象方式进行。但到了详细设计阶段,由于数据持久化需要保存到关系数据库,不得不自底向上修改设计方案,又回到了按照过程进行编程的老路上来,这是非常令人沮丧的。

如代码9.2展示的是由数据库中查询数据,按条读取结果集中每一个字段,然后装配成对象,而代码9.3展示的是相反的情况,把一个对象保存到数据库中。需要把对象的每一个属性拆出来,拼凑成SQL字符串,再提交数据库。这个来回转换的过程烦琐而且极容易错,对于一个面向对象的程序如噩梦一般。

代码9.2  查询数据库组装对象

List persons = new Arraylist();
ResultSet rs = stmt.executeQuery("SELECT * FROM person");
// 对结果集进行处理
while (rs.next()) {
Person person  = new Person
int id = rs.getInt("id");
String name = rs.getString("name");
Integer age = rs.getObject("age") == null
null : rs.getInt("age");
person.setId(id);
person.setName(name);
persion.setAget(age);
Persons.add(person);
}
代码9.3   保存对象到数据
 String sql = "insert into t_person (id, name, age) values
("+person.getId+", "+person.getName()+", "+person.getAge()+")";
Statement stmt = con.createStatement();
stmt.executeUpdate(sql)
con.commit()
优秀的面向对象开发人员厌倦了这种重复性的劳动,开始采用通常的“积极”偷懒做法,即创建工具,使整个过程自动化,帮助开发者只关心对象而不必考虑数据库的结构。对于关系数据库来说,这种努力的最大成果就是下一节要介绍的对象/关系映射(ORM)工具。
0 0