【问题标题】:Handling Invoice Number in Multiple Computer在多台计算机中处理发票编号
【发布时间】:2013-02-08 01:25:47
【问题描述】:

我正在用 Java 开发计费软件。在我的应用程序中,用户打开一个用于创建发票的窗口。

当窗口打开时,它会获取MaxID 并从INVOICE 表中返回long MaxID+1 并将其显示在Jlabel 中。现在,当用户每次开始计费时,发票编号将为MaxID+1。该系统在单用户应用程序中运行良好。

但是当这个应用程序在多台计算机上运行时,就会出现一个很大的问题。当两个用户,比如userOneuserTwo 同时打开同一个窗口时,他们将得到相同的MaxID+1。结果,他们俩都将在同一个发票号中输入数据。我该如何解决这个问题?

请帮忙。

【问题讨论】:

  • 还有什么原因你没有在数据库本身中使用自动增量列吗?
  • 自动增量在这里不起作用,因为 MaxID+1 对几行来说是相同的。这是发票编号。一张发票可以有多个项目。

标签: java database invoice


【解决方案1】:

竞态条件的经典场景。您需要同步对 MaxId 的访问。根据您的数据库,您需要在访问 MaxId 之前锁定 Invoice 表,并在检索到它后将其解锁。 MaxId 的检索必须是原子的。

【讨论】:

  • 最好在数据库上的存储过程中进行同步,该过程执行 MaxID+1 更新并返回值,然后让您的应用程序调用该过程以获取下一个 ID。这允许完全独立的应用程序实例共存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多