【问题标题】:Challenges with letting another thread write data into Database (Android, java)让另一个线程将数据写入数据库(Android、java)的挑战
【发布时间】:2016-05-21 21:26:22
【问题描述】:

在我正在开发的Android 应用程序中,对象Debt 表示数据库中debts 表中的一个条目。

我创建了一个 Debt 类型的对象队列和一个名为 DatabaseWriter 的线程。当我在这个队列中放置一个债务时,线程被唤醒并负责在数据库中创建一个新条目,其中包含所述 Debt 对象中包含的数据。

我的问题如下:

  1. Debt 对象必须先写入数据库,然后我才能知道它的主键(整数类型),它设置为自动增量

  2. 同时,我正在使用数据库主键来识别应用程序中的Debt 对象。例如,我有 HashMaps,其中键是数据库中的主键,值是 Debt 对象本身。

结论是我不能同时更新数据库,因为我不能使用新创建的 Debt 对象,直到我知道它们在数据库中的主键。使用此模型,我剩下的唯一可能就是按顺序执行所有操作。

有没有办法解决这个问题?有什么设计模式可以解决它?我是数据库新手。

【问题讨论】:

    标签: java database multithreading concurrency queue


    【解决方案1】:

    我没有Android开发经验,但是在使用Mybatis和Mysql的时候,可以使用SELECT LAST_INSERT_ID()插入对象后立即获取主键。在这种情况下,如果你不能改变数据库设计,你可以写一个名为IDGenerator的类,它会做两件事:

    1. 在程序启动时获取表中的最大id并保存在AtomicLong值中,称为nowId
    2. 提供一个类似getId()的方法,这个方法只返回nowId.incrementAndGet()

    【讨论】:

      猜你喜欢
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多