2011-07-14 58 views
0

首先,我想确认开发人员是否有责任遵循这些属性或API等交易Apis的责任?使用JDBC实现ACID属性?

下面是我的理解,我们如何在JDBC实现耐酸碱性能

原子性: - 因为不存在与连接相关联的一个交易,所以我们提交或回滚,有没有部分updation.Hence实现

Consitency: - 当某些数据完整性约束条件成立时(比如一些检查约束),则会抛出sqlexception。然后程序员通过回滚事务来获得一致的数据库?

上面的一个问题说我们做了transaction1,并且在上面解释的事务2期间抛出了sql excpetion。现在我们捕获异常,并确定提交将首先提交事务?

隔离: - 由JDBC Apis.But提供,这导致了并发更新的问题。所以它已经被人工处理了吗?

耐用性: - 由JDBC Apis提供。

如果上面的理解是正确的,请让我来?

回答

2

事务完整性的ACID原则是由数据库而不是由API(如JDBC)或由应用程序实现的。您的应用程序的责任是选择一个数据库和一个数据库配置,以支持您所需的任何事务完整性,并正确识别应用程序中的事务边界。

当引发异常时,应用程序必须确定是否适合回滚整个事务或继续进行其他处理。如果您的应用程序正在处理来自供应商的订单(例如处理成功的99个订单并记录失败的1个订单供用户调查),这可能是适当的。另一方面,由于1次失败,您可能会拒绝全部100个订单。这取决于你的应用程序在做什么。

通常,您一次只打开一个事务(或者更准确地说,每个连接有一个事务)。因此,如果您在事务2中工作,则事务1按定义已经完成 - 事先已经提交或回滚。事务2中抛出的异常对事务1没有影响。

根据应用程序请求的事务隔离级别(以及数据库支持的事务隔离级别)以及应用程序的机制,丢失的更新是您可能需要关注。如果将事务隔离级别设置为提交读取,则可能会在事务1中读取值为'A',等待用户执行某些操作,将值更新为'B',然后在未意识到该事务的情况下提交2在您读取数据和写入数据之间将值更新为'C'。这可能是您需要处理的问题,或者可能是最后一个人更新行以“赢”的情况。

另一方面,您的数据库应负责自动锁定,以防止两个事务同时更新同一个表的同一行。它可以通过锁定超过严格限制来实现,但它会以某种方式将更新序列化。