【问题标题】: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