ArcSDE图层中定义了两种锁,SE_READ_LOCK和SE_WRITE_LOCK。锁影响的范围可以是整个图层或者是图层中的某个范围。
当数据以SE_READ_LOCK的方式锁住以后,这部分数据就被保护起来以防止被更新。其它用户也可以在相同的数据上建立SE_READ_LOCK锁,但是不能再加SE_WRITE_LOCK锁或者更新数据。
当数据以SE_WRITE_LOCK的方式锁住以后,这部分数据不但不能被其它用户更新,而且其它用户也不能再在相同的数据上加任何锁。
由此也可以推出,如果在图层上以SE_READ_LOCK方式锁定的数据互相是可以有重叠的,而以SE_WRITE_LOCK方式锁定的数据是不能相互重叠的。
以下的代码显示了如何在图层上添加和释放锁:
SeConnection conn = getConn();
if (conn != null) {
try {
SeLayer layer = new SeLayer(conn, "SDE_CITIES", "SHAPE");
layer.lock(SeLayer.SE_READ_LOCK);// 以SE_READ_LOCK方式锁定整个图层
layer.freeLock();
layer.lock(SeLayer.SE_WRITE_LOCK);// 以SE_WRITE_LOCK方式锁定整个图层
layer.freeLock();
layer.lockArea(SeLayer.SE_READ_LOCK, new SeExtent(-116, 39,
117, 40));// 以SE_READ_LOCK方式锁定部分数据
layer.freeLock();
} catch (SeException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SeException e) {
e.printStackTrace();
}
}
}