【问题标题】:Concurrent access using JDBC in Java在 Java 中使用 JDBC 进行并发访问
【发布时间】:2011-07-04 15:39:42
【问题描述】:

我正在使用 JDBC 开发 Java 桌面应用程序,并且我想管理对数据库的并发访问。有人告诉我要使用 Sessions,但经过一些研究后发现 Sessions 在桌面应用程序中是不可能的。

这就是我寻求帮助的原因。您对如何管理这件事有任何想法。

谢谢

【问题讨论】:

  • 我假设您有多个使用数据库连接的后台/工作线程。你能澄清一下问题是什么吗?是关于在您的桌面应用程序中定义事务吗?
  • 是的,该应用程序将被许多用户访问,他们会做一些事情(插入、更新、...)这就是我想管理这个混乱的原因。
  • 同一个桌面应用会被多个用户同时访问,还是每个用户都有自己的实例?
  • 每个用户都有自己的实例,但事务将在数据库引擎中执行。

标签: java database session jdbc concurrency


【解决方案1】:

根据您的描述,我建议您在尝试插入或更新某些可能已被其他人更改的行时检查 SQL 异常。在这种情况下,也许您应该重新加载您的应用程序向用户显示的内容,以便他们获得最新数据。另一种选择是显示用户友好的错误。

如果您的应用连续执行多个查询(插入、更新),我建议使用事务。我认为在桌面应用程序中设置它们的最简单方法是使用 Spring 框架,如果你熟悉的话。

【讨论】:

    【解决方案2】:

    不清楚您所说的管理并发访问究竟是什么意思 - 您是否要避免对数据库进行多次选择查询?在这种情况下,使用 SELECT 进行 UPDATE 可能是一种选择。如果您正在寻找更通用的方法来限制单个用户在任何时候访问数据库,您将不得不在我想的代码中滚动您自己的锁定机制。

    【讨论】:

      【解决方案3】:

      只要每个线程使用不同的连接,JDBC 中就不应该有任何并发​​问题。有许多方法可以实现这一目标。例如ThreadLocal 或连接池。

      我看不到许多用户如何访问单个桌面应用程序。您可以拥有多个桌面应用程序副本,并且每个用户都有自己的连接。这不应该引起问题。您需要澄清您的顾虑。

      【讨论】:

      • 每个用户都有自己的实例,但事务将在数据库引擎中执行。
      • @dotNET,当您正确使用交易时,这就是您所做的。在 Java 中没有什么可做的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 2014-02-09
      • 2017-10-23
      相关资源
      最近更新 更多