1

我有以下查询:

String updatequery = "UPDATE tbl_page SET linkCount = ?, pageProcessed = 1 WHERE pageUrl =?";
PreparedStatement updatestmt = kon.prepareStatement(updatequery);
updatestmt.clearParameters();
//updatestmt.setQueryTimeout(10);
updatestmt.setInt(1, linkCount);
updatestmt.setString(2, urlLink);
updatestmt.executeUpdate();

当我将查询超时设置为 10 秒时,它将捕获查询超时的异常。但是当我不这样做时,它会继续等待。查询有什么问题?pageUrl列是主键varchar(900)

我知道准备好的语句可能有问题,因为当我在 MS SQl Server Management Studio 中运行此查询(“?”替换为它的值)时,它工作正常。

我是否缺少 Java 或 MSSQL 中的某些内容?

4

2 回答 2

2

由于代码看起来很好,这可能是数据库方面的问题。可能是其他人通过更新它而不是执行提交/回滚来阻止该行(很可能来自您的 MS-SQL Server 管理工作室!)。您可以为同一记录查找其他进程拥有的锁,以便确定这不是数据库问题。

于 2012-05-21T08:48:36.223 回答
1

在 pageUrl 上创建索引:

create index tbl_page_pageUrl_index on tbl_page(pageUrl);

这将允许快速访问您要更新的行。

如果没有此索引,数据库必须进行全表扫描,并且当与update命令结合使用时,是否可能导致锁争用甚至死锁,具体取决于您的锁定选项。

于 2012-05-21T00:17:05.703 回答