数据库事务与JDO事务的对比

博客对比了关系数据库和对象存储(包括纯粹面向对象数据库和ORM系统)在事务处理上的差异。介绍了关系数据库事务基于连接由客户端发起,还给出了JDBC示例。同时分析了对象事务(以JDO为例)实现的难度,指出其在多连接修改同一对象时与关系数据库的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相对于全新的对象存储而言(不管是纯粹面向对象的数据库,还是ORM系统),关系数据库除了不能按面向对象方式进行编码外,其它许多方面都优于目前的对象存储技术。

拿事务来说,关系数据库事务有如下几个基本假设:

1.事务发生在连接上,是由客户端发起的。例如使用JDBC编写程序,大致如下:

...

//创建到数据库的连接

Connection conn = DriverManager.getConnection("", "", "");

//设置连接自动提交,请注意,事务没有显式声明,而是隐含在连接中

conn.setAutoCommit(true);

//所有语句与连接绑定

Statement stat = conn.createStatement();

//所有数据库操作与语句绑定,也就是与连接绑定

stat.executeUpdate("");

//最后,提交通过连接进行

conn.commit();

2. 数据库端的存储过程等内容,看似与连接无关,其实执行时还得靠连接,如下:

create procedure test as

update test set name='a';

...

但该存储过程的执行是由客户端通过连接发起的,具体过程不再论述。

相对于数据库事务而言,对象事务在实现上有一定的难度,针对目前流行的JDO而言,其写法大致如下:

//一个pm相当于数据库的一个连接

PersistanceManager pm;

//一个连接对应一个事务

Transaction trans = pm.currentTransaction();

trans.begin();

//查询与pm对应,也就与事务对应

Queray q = pm.newQuery(Student.class);

Collection c = (Collection)q.execute();

//查找出来的对象与query对应,从而与事务对应

Student s = (Student)c.iterator().next();

s.setName("a");

trans.commit();

从上面程序我们看不出JDO事务与数据库事务有什么区别,但是请注意,如果有两个pm,这两个pm同时修改同一个对象,安装关系数据库的一般认识,第二个pm应当无法修改对象,因为第一个pm会把对象锁定,但在JDO中,这一点是无法达到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值