【问题标题】:Java safe communication with database from multiple sessions从多个会话与数据库进行 Java 安全通信
【发布时间】:2023-11-22 15:34:01
【问题描述】:

我必须用 Java 为我的公司开发一个小型应用程序,它应该显示来自数据库的数据。显示的数据应该在 gui 中是可编辑的,并且使用保存按钮将编辑的数据写入数据库。 我现在的问题是如何处理数据库通信,因为多个用户将同时使用该应用程序?我认为如果 A 人正在查看数据而 B 人进行更改,则会出现问题。如果现在 A 保存他的更改,则 B 的数据将丢失。

我在互联网上找不到任何东西,因为我不知道我必须使用哪个关键字进行搜索。我只能找到一种叫做 dao 模式的东西,但我认为这不是我要找的东西。

希望你能帮助我。

【问题讨论】:

标签: java database session design-patterns communication


【解决方案1】:

您的问题称为数据库锁定;

锁定可能是最被忽视的持久性考虑因素。最多 应用程序倾向于忽略在处理期间考虑并发问题 开发,然后在进入之前加入锁定机制 生产。考虑到大部分软件项目 失败或被取消,或者永远无法获得庞大的用户群,也许这 是合乎逻辑的。然而,锁定和并发是一个关键的或至少 对于大多数应用程序来说是一个非常重要的问题,因此可能应该是 在开发周期的早期考虑的东西。

如果应用程序将同时写入相同的对象, 那么锁定策略是至关重要的,这样可以避免数据损坏 阻止了。有两种防止并发的策略 修改同一对象/行;乐观和悲观 锁定。从技术上讲,还有第三种策略,鸵鸟锁定,或者没有 锁定,这意味着把你的头埋在沙子里,忽略这个问题。

乐观锁定

乐观锁假设数据不会被修改 当你读数据直到你写数据。这是最 在今天的持久性中使用和推荐的常见锁定样式 解决方案。该策略包括检查一个或多个值来自 读取的原始对象在更新时仍然相同。这个 验证对象在两者之间没有被其他用户更改 读和写。

悲观锁定

悲观锁定意味着在你之前获取对象上的锁定 开始编辑对象,以确保没有其他用户正在编辑 物体。悲观锁定通常通过使用来实现 数据库行锁,比如通过SELECT ... FOR UPDATESQL 句法。读取并锁定数据,进行更改,然后 事务已提交,释放锁。

有关更多信息以及如何使用 JPA 在 Java 中实现它,请阅读 Java Persistence Locking

【讨论】:

  • 谢谢 Onur 这正是我要找的。​​span>