Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一种替代方案可以使用NOWAIT升级DLOCK,从而使事务保持可提交状态?_Java_Sql Server_Jdbc_Transactions_Locking - Fatal编程技术网

Java 是否有一种替代方案可以使用NOWAIT升级DLOCK,从而使事务保持可提交状态?

Java 是否有一种替代方案可以使用NOWAIT升级DLOCK,从而使事务保持可提交状态?,java,sql-server,jdbc,transactions,locking,Java,Sql Server,Jdbc,Transactions,Locking,鉴于以下情况: SQL Server中的数据库对象: 创建表tcint; 创建表t2c int; 创建表t3 c int; 创建表t4 c int; 更新为开始后在t上创建触发器tr 更新t2集c=c; 终止 更新为开始后在t2上创建触发器tr2 开始尝试 插入t4值1; 使用updlock、nowait从t3中选择null; 结束尝试 开始捕捉 -如果t3无法锁定,如何恢复? 末端捕捉; 终止 同时运行的Java程序: P1以与上述tr2中相同的方式锁定t3,但在终止前不会放弃锁定。 P2更新

鉴于以下情况:

SQL Server中的数据库对象:

创建表tcint; 创建表t2c int; 创建表t3 c int; 创建表t4 c int; 更新为开始后在t上创建触发器tr 更新t2集c=c; 终止 更新为开始后在t2上创建触发器tr2 开始尝试 插入t4值1; 使用updlock、nowait从t3中选择null; 结束尝试 开始捕捉 -如果t3无法锁定,如何恢复? 末端捕捉; 终止 同时运行的Java程序:

P1以与上述tr2中相同的方式锁定t3,但在终止前不会放弃锁定。 P2更新t。 P2似乎以静默方式失败,即没有SQLExceptions,但这很好。更重要的是,由于tr2中t3上的锁定失败,因此不会对t和t4进行任何更改。我试图在锁定之前创建一个保存点,但在catch子句中回滚到该保存点也失败了。似乎是由于未能锁定导致事务无法执行。有没有办法在保留迄今为止所做更改的同时从中恢复过来?或者,是否有一种替代使用NOWAIT的UPDLOCK的方法不会导致事务不可模仿