【问题标题】:executing a block of stetement at one go [closed]一次执行一段语句[关闭]
【发布时间】:2016-08-16 13:59:51
【问题描述】:

我有一些块语句从数据库中获取数据递增它的值并在数据库中再次更新,如果触发 5 个请求它工作正常但如果我在几秒钟内触发请求数(考虑 10)(考虑 10到 15 秒)我在 10 个请求中得到 2 到 3 个请求的相同值。什么是解决方案,以便我可以获得每个请求的下一个值?我已经尝试过同步块,但它不起作用......!

【问题讨论】:

  • 好吧,看不到你的代码,答案只能是一个笼统的答案:学习Java并发,好的开始是here,然后你可以继续更详细的tutorial
  • 听起来更像是应该在数据库中同步。

标签: java synchronization


【解决方案1】:

尝试序列

大多数数据库系统都支持序列。序列的主要目的是为您提供增量和唯一值。

在 Oracle 数据库中,您可以查询 sql:

CREATE SEQUENCE mysequnece;
SELECT mysequnece.nextval FROM dual;

What is a sequence (Database)? When would we need it?

【讨论】:

    【解决方案2】:

    您可以在更新将是原子的数据库级别增加值。 例如

    UPDATE mytable 
      SET logins = logins + 1 
      WHERE id = 12
    

    那么你就不需要在代码中同步块了。

    有关数据库级别值增量的更多信息,请参阅this answer

    【讨论】:

      猜你喜欢
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 2012-12-31
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      相关资源
      最近更新 更多