以下简单查询无法完成。准备好的声明

时间:2012-05-21 00:04:52

标签: java sql-server jdbc prepared-statement

我有以下查询:

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中的内容?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在pageUrl:

上创建索引
create index tbl_page_pageUrl_index on tbl_page(pageUrl);

这样可以快速访问要更新的行。

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