我遇到了通过 Java Web 服务到达我们数据库的重复记录的问题,我认为这与 Oracle 处理线程有关。
使用我们构建的 iPhone 应用程序,用户可以将鸟类观察结果添加到他们在假期访问的新站点。他们在“新站点 A”(例如)创建了三个记录。iPhone 将这三个记录中的每一个都打包成单独的 JSON 字符串,其中包含相同的日期和位置详细信息。
在上传时,Web 服务会遍历每个 JSON 字符串。
迭代/观察 1. 它检查数据库以查看站点是否存在,如果不存在,则创建一个新站点并将观察结果添加到挂表中。
迭代/Obs 2. 该站点现在应该存在于数据库中,但在迭代 1 中的数据库站点检查未找到该站点,并且创建了第二个新站点。
迭代/Obs 3. 对现有站点的检查现在可以工作,第三个观察结果附加到现有站点之一。所以 Web 服务和数据库代码确实有效。
Web 服务在每次迭代结束时提交。
第二次迭代的原因是由于Java调用后Oracle提交延迟导致第二次迭代没有在数据库中找到新站点,因此在迭代1真正完成时它已经开始处理迭代2,或者是否有可能Oracle 在单独的线程上运行每个迭代?
我们考虑的一种解决方案是在 Web 服务中使用 Thread.sleep(1000),但我宁愿不惩罚 iPhone 用户。
感谢您的任何帮助,您可以提供。伊恩