You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridDB更新行失败:游标未锁定错误的原因与解决方法

GridDB更新记录报错“Cursor not locked”问题解决

错误含义

错误码140039/145039对应的“Cursor not locked”,本质是你尝试更新查询返回的行时,没有锁定目标记录。GridDB为了保证并发场景下的数据一致性,要求更新通过查询获取的行之前,必须先锁定该行,否则会拒绝执行更新操作。

解决方法

在你的SELECT查询语句末尾添加FOR UPDATE子句,让查询操作自动锁定匹配的行,这样后续就能通过游标正常更新了。修改后的完整代码如下:

Container<Integer, Row> container = store.getContainer(studentinfo);
if ( container == null ){
  throw new Exception("Container not found.");
}
container.setAutoCommit(false);

// 添加FOR UPDATE子句锁定目标行
Query<Row> query = container.query("SELECT * WHERE id = 1069971 FOR UPDATE");
RowSet<Row> rs = query.fetch(true); 

while( rs.hasNext() ){
  Row row = rs.next();
  row.setInteger(3, 88);
  rs.update(row);
}

container.commit();

System.out.println("Updated Row");

补充说明

  • FOR UPDATE会锁定查询返回的行,直到事务提交或回滚,能有效避免并发更新导致的数据冲突。
  • 你当前设置的手动提交事务(setAutoCommit(false))是正确的,无需修改。

内容的提问来源于stack exchange,提问作者Ismail Vohra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:20:19