WEB开发网
开发学院软件开发Java 建立一个 Derby 日历,第 3 部分: 使用事务和锁定... 阅读

建立一个 Derby 日历,第 3 部分: 使用事务和锁定(上)

 2010-04-19 00:00:00 来源:WEB开发网   
核心提示: 这是因为启用了 autocommit,所以数据库在每个语句之后立即提交,建立一个 Derby 日历,第 3 部分: 使用事务和锁定(上)(6), 现在看看如果关闭 autocommit,数据库在每个语句之后不提交会出现什么情况,锁就保持有效,可以通过提交来结束事务,创建事务Derby 允许关闭

这是因为启用了 autocommit,所以数据库在每个语句之后立即提交。

现在看看如果关闭 autocommit,数据库在每个语句之后不提交会出现什么情况。

创建事务

Derby 允许关闭 autocommit 模式,因此可以看到创建事务的过程。在第一个窗口中关闭 autocommit,然后插入新的记录,如 清单 5 所示。

清单 5. 关闭 autocommit

   ij> autocommit off; 
ij> insert into demo (theText, minValue, maxValue) values ('third value', 
100, 200); 
1 row inserted/updated/deleted

现在从另一个窗口中选择数据,如 清单 6 所示。

清单 6. 选择未提交的数据

   ij> select * from demo; 
THETEXT                      |MINVALUE  |MAXVALUE 
-------------------------------------------------------------------------- 
ERROR 40XL1: A lock could not be obtained within the time requested

大约一分钟之后才能看到响应,这是数据库默认的等待时间。为何出现错误呢?有两个原因。首先,默认情况下,Derby 不允许查看未提交的行。其次,虽然 Derby 通常默认锁定单独的行,但是如果认为有必要,就会自动将其上升到锁定整个表。因为数据库和表都很小,这一行就占了数据库的很大比例,所以它锁定了整个表。(本教程后面将讨论 不同类型的锁定。)

提交事务

只要事务一直处于活动状态,锁就保持有效。可以通过提交来结束事务。在原来的窗口中 commit 该事务:

ij> commit;

然后再从第二个窗口中选择数据(参见 清单 7)。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:建立 一个 Derby

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接