我正在开发一个web应用程序,该应用程序在前端显示SQL表中的数据。
更新:
数据库是PostgreSQL 9.4
我的应用程序是一个Maven Web应用程序,使用javaservlet进行逻辑处理,使用jsp页面进行表示。
有多个用户在处理同一数据(与数据源相同的sql表)
如何让所有用户始终可以使用相同的数据?
示例:
- 用户A&B查看带有数据的html表(用户sql表)
- 用户A对数据进行更改,例如向sql表中添加新用户(通过按钮触发sql插入语句)
- 用户B应该能够看到对该表所做的更改
截至目前,只有当用户B刷新页面时,才会再次从sql表中提取数据;他能够看到另一个用户所做的更改。
问题是我目前的状态是:
- 用户A&B与所有用户一起查看html表
- 用户A删除用户C
- 用户A(尚未看到用户C已从sql表中删除)希望更改用户C的属性(如更改其名称)
- 然后他进行名称更改,但sql-udate查询(由按钮触发)将失败,因为用户C已被用户a从sql表中删除
是否有任何方法可以向多个用户显示始终最新的相同数据,以便两个用户都可以在任何时候使用完全相同的数据??
您可以使用WebSocket连接来保持用户的最新状态。对API的每次调用都必须将相关更改推送给所有受影响的用户。根据您的API设计,这可能根本不难实现。
如果您只是想保持一致性,那么可以实现某种记录锁定。将新列添加到表中,例如last_updated
,并让通过API的任何UPDATE
或DELETE
操作失败,直到last_updated
列与用户发送到服务器的内容一致。这将确保只有拥有正确当前记录的用户才能针对它发布UPDATE
或DELETE
语句
关于Java 中WebSockets的一些进一步阅读