Java/Javascript -> 多个用户在同一个 sql-datasource 上工作,必须在前端保持一致

Posted

技术标签:

【中文标题】Java/Javascript -> 多个用户在同一个 sql-datasource 上工作,必须在前端保持一致【英文标题】:Java/Javascript -> Multiple users working on same sql-datasource that has to be consistent in frontend 【发布时间】:2015-12-10 10:43:38 【问题描述】:

我正在开发一个 Web 应用程序,该应用程序在前端显示来自 SQL 表的数据。

更新:

数据库是 PostgreSQL 9.4

我的应用程序是一个 Maven Web 应用程序,使用 java servlet 进行逻辑和 jsp 页面进行演示。

有多个用户在处理同一个数据(同一个 sql 表作为数据源)

我怎样才能让所有用户始终可以使用相同的数据?

例子:

用户A&B查看带数据的html表(用户sql表) 用户 A 对数据进行更改,例如将新用户添加到 sql 表中(通过按钮触发 sql inset 语句) 用户 B 应该能够看到对该表所做的更改

目前,只有当用户 B 刷新页面时,才会再次从 sql 表中提取数据,并且他能够看到另一个用户所做的更改。

问题是我目前的状态是:

用户 A 和 B 查看所有用户的 html 表 用户 A 删除用户 C 用户 A(还没有看到用户 C 已从 sql 表中删除)想要更改用户 C 的属性(比如更改他的名字) 然后他进行了名称更改,但 sql udate 查询(由按钮触发)将失败,因为用户 C 已被用户 A 从 sql 表中删除

是否有任何方法可以向多个用户显示始终是最新的相同数据,以便两个用户可以始终使用完全相同的数据??

【问题讨论】:

你用的是什么服务器? 【参考方案1】:

您可以使用 WebSocket 连接来让您的用户保持最新状态。对您的 API 的每次调用都必须将相关更改推送给所有受影响的用户。根据您的 API 设计,这可能并不难实现。

如果您只是想保持一致性,请实施某种记录锁定。在表中添加一个新列,例如last_updated 并让通过您的 API 的任何 UPDATEDELETE 操作失败,直到 last_updated 列与您的用户发送到服务器的内容一致。这将确保只有拥有正确当前记录的用户才能针对它发出UPDATEDELETE 语句。

一些further reading 在 Java 中的 WebSockets

【讨论】:

那行得通,我明白了。但是用户仍然必须刷新他对数据的视图才能看到其他人所做的更改。我不知道这是如何“正确”完成的,但是如果数据库表已被修改,用户是否应该查看数据更新? @Alkahna 使用 WebSocket 连接到您的用户浏览器将允许您将更改推送到当前显示的表格。 所以我需要一个 java 类(我有用于逻辑的 java 类/servlet 和用于显示前端的 jsp 页面)来检查用户正在查看的数据是否与 sql 中的数据相同桌子对吗? @Alkahna 只是在数据被其中任何一个更改时向所有客户端发送推送通知。例如在您的 POST 请求处理程序中。 我添加了一个指向描述“使用 WebSocket、javascript 和 HTML5 构建 Web 应用程序”的页面的链接

以上是关于Java/Javascript -> 多个用户在同一个 sql-datasource 上工作,必须在前端保持一致的主要内容,如果未能解决你的问题,请参考以下文章

版本号对比方案及参考代码(Objective-C,Java,JavaScript)

华为OD机试 2023快递投放问题(C++ Java JavaScript Python)

如何在javascript中放置链接

Java/JavaScript - java.time.Instant 序列化为 javascript Date [重复]

让C#可以像Javascript一样操作Json

Java新手入门200例117之Java反射获取方法执行方法