java - jQGrid 编辑中的行锁定

标签 java jdbc jqgrid edit optimistic-locking

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

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

请帮忙。

谢谢

最佳答案

我不是 JDBC 开发人员。如何实现并发控制有一些常见的原则。其中一种方式是 optimistic concurrency control 。这种并发的实现例子有很多。

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

有关实现的更多信息,您可以阅读 the answerthis old one .

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

关于java - jQGrid 编辑中的行锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17813783/

相关文章:

javascript - 如何在JqGrid中动态绑定(bind)行和列?

java - System.getProperty ("user.dir") 通过 Web 服务执行时给出 Eclipse 的路径

java - 更改 double 格式 - 点改为逗号

javascript - jqGrid - 表单编辑叠加与主题不同

jquery - jqgrid 获取所有网格列名称

jdbc - 用于记录堆栈跟踪的 Log4j JDBCAppender

java - Protobuf 错误 :Protocol message tag had invalid wire type

java - 基本二项式期权定价模型

java - 来自 Oracle PL/SQL 存储过程的 JDBC 结果集

java - C3P0 的多个数据源