SQL Server - 使用JDBC的行锁定
问题描述:
使用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中
锁定正确的行上获取尝试。我可以在其他行执行SELECT
和UPDATE
指令。
如果我尝试相同的方式,但使用JDBC,整个表将被锁定。
任何帮助表示赞赏
答
看看你的会话的隔离级别。
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
为什么你认为整个表被锁定?你有什么检查,告诉你这个? – muhmud 2013-02-26 20:37:26
这不太可能与JDBC或jTDS有关。这很可能是SQL Server中表的配置造成的。例如,如果[id]上没有索引,则会得到同样的效果。 – RBarryYoung 2013-02-26 22:20:22
发布确切的Java代码。 – 2013-02-27 14:05:21