【发布时间】:2011-10-20 10:53:57
【问题描述】:
我编写了一个简单的 Java 程序,它打开一个事务,选择一些记录,执行一些逻辑,然后更新它们。我希望记录被锁定,所以我使用了 SELECT...FOR UPDATE。
该程序在 MS SQL Server 2005 上运行良好,但在 Oracle 10g 中记录没有锁定!
知道为什么吗?
我按如下方式创建连接:
Connection connection = DriverManager.getConnection(URL, User, Password);
connection.setAutoCommit(false);
如果我从 Oracle SQL Developer 客户端执行 SELECT..FOR UPDATE,我可以看到记录被锁定,所以我认为这可能是 JDBC 驱动程序问题而不是数据库问题,但我不能在网上找不到任何有用的东西。
这些是我正在使用的 JDBC 驱动程序的详细信息:
Manifest-Version: 1.0
Implementation-Vendor: Oracle Corporation
Implementation-Title: ojdbc14.jar
Implementation-Version: Oracle JDBC Driver version - "10.2.0.2.0"
Implementation-Time: Tue Jan 24 08:55:21 2006
Specification-Vendor: Oracle Corporation
Sealed: true
Created-By: 1.4.2_08 (Sun Microsystems Inc.)
Specification-Title: Oracle JDBC driver classes for use with JDK14
Specification-Version: Oracle JDBC Driver version - "10.2.0.2.0"
【问题讨论】:
-
请更具体地说明您遇到的问题:什么不起作用?
-
SELECT...FOR UPDATE 不会锁定记录。如果我尝试从另一个程序同时更新相同的记录,则更新成功,而我的理解是这些记录应该被锁定,直到我提交或回滚事务(这实际上是 SQL Server 发生的情况)。
标签: oracle select jdbc locking