2013-02-26 82 views
0

使用JDBC可以锁定SQL Server表上的单个行吗?SQL Server - 使用JDBC的行锁定

我使用JTDS驱动程序v1.2.7和SQL Server 2005

UPDATE myTable SET timestamp=GETDATE() WHERE id='myid' 
从SQL Server Management Studio中

锁定正确的行上获取尝试。我可以在其他行执行SELECTUPDATE指令。

如果我尝试相同的方式,但使用JDBC,整个表将被锁定。

任何帮助表示赞赏

+0

为什么你认为整个表被锁定?你有什么检查,告诉你这个? – muhmud 2013-02-26 20:37:26

+0

这不太可能与JDBC或jTDS有关。这很可能是SQL Server中表的配置造成的。例如,如果[id]上没有索引,则会得到同样的效果。 – RBarryYoung 2013-02-26 22:20:22

+1

发布确切的Java代码。 – 2013-02-27 14:05:21

回答

1

看看你的会话的隔离级别。

select session_id,login_name,program_name, 
date_format,quoted_identifier,arithabort, 
ansi_null_dflt_on,ansi_defaults,ansi_warnings, 
ansi_padding,ansi_nulls,concat_null_yields_null, 
case transaction_isolation_level 
when 0 then 'Unspecified' 
when 1 then 'ReadUncomitted' 
when 2 then 'ReadCommitted' 
when 3 then 'Repeatable' 
when 4 then 'Serializable' 
when 5 then 'Snapshot' 
end as transaction_isolation_level, 
deadlock_priority 
from sys.dm_exec_sessions 

也许你的SELECT因为使用READ COMMITTED而被阻塞。当您离开打开该事务时,UPDATE将仅阻止该单行。

最好的问候。

+0

设置'ReadUncomitted'通过'SELECT'指令解决问题。仍然无法更新其他行 – Daniel 2013-02-27 15:43:04