0

我想为 jQGrid 编辑实现行锁定。由于我的后端使用 JDBC,我正在考虑在后端使用乐观锁定,如果未获得锁定,则在网格上显示错误消息。

这是最好的方法还是有更好的选择?是否可以锁定网格本身上的行,以使其他用户(在不同的系统和浏览器上)无法在编辑特定行时对其进行编辑?

请帮忙。

谢谢

4

1 回答 1

1

我不是 JDBC 开发人员。有一些共同的原则可以实现并发控制。一种方式是乐观并发控制。这种并发的实现例子有很多。

因为我主要使用 Microsoft SQL Server,所以我总是使用将二进制时间戳值保存在数据库的每一行表中的方式。我在每个表中添加了一个不可为空的rowversion类型的列,它在语义上等同于一个binary(8)类型。主要优点是不需要手动填充列。SQL Server 拥有一个与数据库关联的计数器。在任何数据库表中的每次行插入或行更新时,具有的列rowversion都将分配给计数器的当前值。之后,计数器将递增。顺便说一句,有一行的“timetemp”。如果对行进行了一些修改,则在具有的列中增加了值rowversion类型。因此,要实现乐观并发,只需将每个 jqGrid 表扩展为包含该rowversion值的附加隐藏列。如果需要修改数据,我将隐藏rowversion列的值与修改后的数据一起发送到服务器。修改请求应按以下方式解释:我获取具有rowversion值的数据并将其修改为新值。我的服务器代码需要在进行更改之前验证数据库中的数据内容是否仍然对应相同的rowversion值。如果是这样,则其他用户不会更改数据,并且可以安全地进行修改。如果值rowversion现在高于服务器应该返回到 jqGrid 关于并发错误的错误消息。建议使用当前数据重新加载网格。

有关实施的更多信息,您可以阅读答案这个旧的

我不确定您是否可以直接使用上述描述的方法,因为您使用的是 JDBC,但我认为实现的主要思想可能是相同的。

于 2013-07-23T15:49:57.080 回答