【发布时间】:2015-03-26 23:20:44
【问题描述】:
我正在针对 Oracle 数据库 (11g) 运行此查询。该连接具有自动提交的默认值,即“true”。
Connection con = driver.connect(url, properties);
String query = "SELECT EMPID, NAME FROM EMPLOYEE FOR UPDATE";
Statement statement = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = statement.executeQuery(query);
SELECT... FOR UPDATE 声明它“锁定选定的行,以便其他用户在您结束事务之前无法锁定或更新这些行。”使用自动提交应该在查询执行后立即执行。但是锁一直存在,直到连接关闭。
(我通过在 sqlplus 上运行查询 select * FROM DBA_DML_LOCKS WHERE NAME = 'EMPLOYEE'; 进行了检查。)
这是一个错误还是有人可以解释原因吗? 提前谢谢你。
【问题讨论】:
-
附言。在关闭自动提交的情况下手动管理事务时,查询按预期工作
-
当你不更新任何东西时,为什么要使用“FOR UPDATE”?
-
我更新了!并使用
resultSet.updateRow(),但锁会一直保留到连接关闭为止。这是有问题的
标签: java oracle jdbc oracle11g