Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同步访问数据库?_Java_Database_Jdbc_Transactions_Synchronisation - Fatal编程技术网

Java 同步访问数据库?

Java 同步访问数据库?,java,database,jdbc,transactions,synchronisation,Java,Database,Jdbc,Transactions,Synchronisation,我正在为我叔叔的钓鱼店写一个小商店管理软件。它支持多个客户端访问本地网络中的单个数据库。我目前正在寻找同步访问数据库的方法。一种解决方案是编写一个管理数据库访问的服务器程序。但是我在网络编程方面没有经验,所以我想找到另一个解决方案。我得出了以下结论: 数据库中的每个条目都有一个时间戳,通知上次编辑它的时间。在客户端编辑条目之前,它会读取时间戳,以检查该条目是否已被其他客户端修改。如果是这种情况,客户端不会写入数据库,而是通知用户。用户必须将其本地更改与修改的db条目合并。读取时间戳、检查时间戳和

我正在为我叔叔的钓鱼店写一个小商店管理软件。它支持多个客户端访问本地网络中的单个数据库。我目前正在寻找同步访问数据库的方法。一种解决方案是编写一个管理数据库访问的服务器程序。但是我在网络编程方面没有经验,所以我想找到另一个解决方案。我得出了以下结论:

数据库中的每个条目都有一个时间戳,通知上次编辑它的时间。在客户端编辑条目之前,它会读取时间戳,以检查该条目是否已被其他客户端修改。如果是这种情况,客户端不会写入数据库,而是通知用户。用户必须将其本地更改与修改的db条目合并。读取时间戳、检查时间戳和写入数据库的过程将作为单个jdbc事务实现


您认为这样做行吗?

对于您的应用程序,因为它看起来非常小(客户端数量合理,并发性低,…),所以您应该使用事务感知数据库(和引擎,如MySQL的InnoDB,尽管这只是一个示例),并在可序列化的事务隔离中运行。从那时起,你就可以保证没有两个人可以在不知情的情况下更新同一件事情,你只需要遵循最佳实践


使用时间戳通常被称为“乐观”锁定。基本上,阅读并尝试编写期望的内容不会改变(包括WHERE子句中的时间戳或版本号),通常这是一件好事(至少对于像您这样规模的应用程序,有很多客户端的应用程序,在某些情况下,高并发性会受到影响)

是的,我见过它被使用过(即使在一个特定的系统中,所有的事情都是通过DB过程完成的,这对原子性有很大帮助)。另一个解决方案是在编辑对象之前锁定对象(这样您就可以使用“locked_by”而不是“last_modified”列)。然后,必须仅通过锁检查机制才允许对对象进行写访问。不过,此设计需要某种超时策略才能工作。