这是允许多个用户同时访问数据库的好方法吗?

Posted

技术标签:

【中文标题】这是允许多个用户同时访问数据库的好方法吗?【英文标题】:Is this a good way to allow multiple users to access a database at the same time? 【发布时间】:2014-11-05 17:09:18 【问题描述】:

我已经问过这方面的问题,但这有点不同。

现在,我将程序设置为插入查询(无论是读取还是写入数据库)、提交更改并立即关闭连接。这允许在很短的时间内锁定数据库。我正在为我的数据库使用 H2,并且我设置了“AUTO_SERVER=TRUE”,以便数据库可以在网络上运行并同时允许多个连接。

现在,这是我的困境。如果由于某种原因,用户试图在锁定文件存在的确切时间访问数据库,我应该如何处理它?我是否应该显示一个 JOptionPane 通知他们数据库当前被另一个用户锁定,并且他们应该确保所有其他连接都已关闭并重试?如果是这样,我将使用什么 Java 代码来确定锁定文件是否存在(或者,如果数据库确实被锁定)?

像往常一样。提前感谢您提供任何有用的回复。

【问题讨论】:

【参考方案1】:

也许我错了,但如果您的 H2 基地处于服务器模式,则您没有任何锁定并且可以同时连接多个用户(您必须将数据源配置为服务器模式而不是嵌入式模式)。

【讨论】:

我将其设置为“AUTO_SERVER=TRUE”,并在我开始添加到数据库时创建了一个锁定文件。然后我必须添加一行代码来提交更改,并添加另一行代码来关闭连接,以删除锁定文件。 你使用了这个连接字符串语法吗? jdbc:h2:tcp://[:]/[]【参考方案2】:

H2 守护线程正在创建锁以避免另一个守护线程进入并尝试在数据库文件当前正在使用时对其进行操作。如果您使用自动服务器模式,那么 H2 守护线程将检查是否存在锁,如果存在,它将尝试连接到锁文件中指定的服务器。

如果两个用户尝试连接到同一个数据库,第一个将获得锁并启动 H2 服务器,第二个将连接到第一个已启动的服务器。

查看auto mixed mode上的文档

【讨论】:

如果通过共享文件夹通过网络访问数据库,这是否可行? 也许,如果两台机器无法通过锁定文件中指定的端口相互通信,那么它就会失败。可能两台机器都可以访问同一个共享,但不能直接相互通信。 看,我发现它(到目前为止)最适合使用几行提交更改然后关闭连接的代码。效率高吗? 可能是,具体取决于用例。启动和停止服务器会涉及一些开销,但这可能会被服务器持续运行所涉及的开销所抵消。 我认为这是一个更好的选择,我拥有它的方式。因此,假设有人试图在一台计算机上做某事,而另一台计算机已锁定数据库。我将如何确定数据库是否被锁定? (例如:如果锁定文件存在,则通知用户它已被锁定。)

以上是关于这是允许多个用户同时访问数据库的好方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

如果不同用户有多个数据库访问,会有问题吗?

在访问中将数据插入多个表的最佳方法?

SQL Serever学习5——数据库配置

Apple Watch:这是让 Apple Watch 应用获取新数据的好方法吗?

允许多个线程同时访问:信号量(读书笔记)

使用多态性是在一个容器下存储不同数据类型的好方法吗?