Java 以下简单查询未完成。准备好的声明

Java 以下简单查询未完成。准备好的声明,java,sql-server,jdbc,prepared-statement,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(

我有以下疑问:

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中是否缺少某些内容?

在pageUrl上创建索引:

create index tbl_page_pageUrl_index on tbl_page(pageUrl);
这将允许快速访问要更新的行


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

由于代码看起来很好,这可能是数据库端的一个问题。可能是其他人通过更新该行而未执行提交/回滚(最有可能是您的MS-SQL Server Management studio!)来阻止该行。您可以为同一记录查找其他进程拥有的锁,以确保这不是数据库问题。

您是否有其他通过JDBC正常运行的查询?是的,只有这一个有问题。从性能角度看,4以上的VARCHAR列不太理想。在这种情况下,我建议使用INT
ID
列作为主键,并对URL使用唯一约束column@OMGPonies是的,我会更改。(目前正在运行测试)但主要问题尚未解决。我想这已经是PK了,我猜他输入了错误的
urlink
。抱歉<代码>页面URL是tbl_页面中的主键