【问题标题】:Clients can't see new records客户看不到新记录
【发布时间】:2012-05-04 22:31:27
【问题描述】:

我在网络上运行我的 java 应用程序的两个客户端时遇到问题,第一个客户端插入记录第二个客户端在刷新结果集时可以看到它,现在当第二个客户端插入新记录时第一个客户端看不到刷新后记录,当第一个客户端关闭应用程序并重新运行它时,从第二个客户端显示正常记录!!!!!!所以发生了什么事 ?我如何监控他们两个来追踪我的问题?注意:在 COMMIT 之后将 AutoCommit 设置为 true 时,一切正常。我需要在 my.cnf 上进行任何额外配置吗?

【问题讨论】:

  • 也许你得到的 List<Data> 没有重新分配新值,它第一次工作

标签: java mysql percona


【解决方案1】:

第一个客户端从不提交其事务,即使它只读取(选择)它保持连接和事务打开,因此刷新时它将处于“旧事务状态”。确保客户端获得一个新的结果集(不要只是刷新它)或更简单 - 只需将 AutoCommit 设置为 true 即可。

编辑:拿走了我现在认为错误的第一个答案。 (我说第二个客户没有提交,我有点看错了这个问题。)

【讨论】:

  • 他们运行同一个应用程序,任何插入或更新的应用程序都有这样的场景(initAutoCommit 设置为 false,进行插入或更新,最后提交)。这让我感到困惑。
  • 嗯,你的意思是你迭代运行同一个应用程序的两个实例? (不要认为这是相关的,但不能确定。)尝试关闭两个应用程序中每个读/写之间的连接,看看是否能解决您的问题(这不是一个好的修复,但有助于追踪问题)。当然,最好的办法是为我们提供更多信息,包括代码。 (顺便说一句,你为什么不直接使用自动提交?)
  • 我使用了你的想法(在需要时连接数据库,然后在选择、更新、删除、插入后关闭它)100% 有效,但正如你所说,这不是一个好主意,我喜欢在午餐时连接应用程序并仅保留一个连接(连接、关闭、重新连接不是一个好主意)我在应用程序运行时进行连接并保留它以完成所有工作,直到用户关闭应用程序。自动提交对我的应用程序来说是个坏主意,因为它是医院的 ERP 和处理网络 ACID 是这里的优先事项。
  • 嗯,是的,(改变了我的答案,因为它是客户端 1 在它应该提交的时候没有提交)。所以不要使用自动提交,而是仔细观察客户端 1 是如何“刷新”的。确实,您应该长时间使用相同的连接。但是提交可能是 ACID 中最重要的部分。 “客户端读取过时数据” - 同意吗?
  • 如果您有“团队查看器 7”,我可以向您显示我想要的实时屏幕。 ID: 697 146 985 Pass: 5799, 15分钟后我会改一下,防止别人连接我的电脑,可以吗?
猜你喜欢
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多