【问题标题】:Continuously fetch data from database using Java使用 Java 不断地从数据库中获取数据
【发布时间】:2011-06-25 23:17:07
【问题描述】:

我有一个场景,我的 Java 程序必须不断地与数据库表通信,例如,当我的 Java 程序在运行时向它添加新行时,它必须获取我的表的数据。我的程序和数据库之间应该有持续的通信。

如果表最初有 10 行,并且用户添加了 2 行,它必须检测到这一点并返回这些行。

我的程序不应该使用 AJAX 和计时器。

【问题讨论】:

  • 是通过 Java 程序还是通过其他应用程序对数据库进行调用(添加行)?

标签: java database


【解决方案1】:

如果您使用的数据库是 Oracle,请考虑使用 triggers,调用 java stored procedure,通知您的客户端数据库中的更改(使用 JMSRMI 或任何您想要的)。

【讨论】:

    【解决方案2】:

    没有 Ajax 和计时器,它似乎无法完成这项任务。

    我也遇到过同样的问题,当数据发生变化时,我需要将一些数据从服务器推送到客户端。

    为此,您可以使用服务器推送 AKA “彗星” 编程。

    在评论中

    • 我们在客户端和服务器之间建立一个通道,客户端订阅特定的通道。
    • 服务器将其数据放入通道中。
    • 客户端读取通道时,获取通道中的所有数据,通道被清空。
    • 所以每次客户端从通道读取时,它只会获取新数据。

    还要监控数据库的变化,你可以有两件事,

    1. 一些触发器/计时器(查看Quartz Scheduler
    2. 事件基础机制,在特定事件的通道中推送数据。

    基本上,客户端无法知道服务器端发生的任何事情,因此您必须推送一些数据或事件来告诉客户端i have some new data, please call some method。它的那种通知。所以请用事件通知检查彗星/服务器推送。

    希望这会有所帮助。

    谢谢。

    【讨论】:

      【解决方案3】:

      真的不是最简单的问题。

      让我们把它分成2个更小的​​问题:

      1) 如何在没有计时器和 ajax 的情况下启用重新加载

      2)服务器端如何实现

      1. 无法从服务器通知客户端。因此,您需要使用 flash 或 silverlight 或 JavaFX 或 Applets 来创建胖客户端。如果 Ajax 的问题是您不知道如何使用它来解决这个问题,那么您可以研究一些现成的 jsp 标记库或支持 ajax 的 jsf 组件。

      2. 如果您只有一台服务器,那么只需添加一个缓存。如果有多个服务器,则考虑使用分布式缓存。

      【讨论】:

        【解决方案4】:

        如果您有一个低流量的数据库,您可以实现一个线程来快速检查数据库的更新(轮询)。

        如果您有一个高流量的数据库,我不建议这样做,因为轮询会产生大量额外的流量。

        【讨论】:

          【解决方案5】:

          服务器通知客户端不是一个好主意(考虑一个有 1000 个客户端的场景)。你是使用一些持久层还是必须坚持纯 JDBC?

          【讨论】:

          • 是的,我有一个持久层,我的数据库是 DB2。请多多指教。
          【解决方案6】:

          如果你在 MYSQL 中开启了二进制日志,你可以看到数据库中发生的所有事务。

          【讨论】:

            【解决方案7】:

            一种可移植的方法是添加一个列时间戳(创建日期),以指示该行何时添加到表中。在初始加载内容后,您只需轮询 where 子句 current_time >= create_date 的新内容。如果行可能具有相同的时间戳,您需要在添加它们之前过滤重复项。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-05-01
              • 1970-01-01
              • 1970-01-01
              • 2012-08-16
              • 2014-06-09
              • 2021-10-03
              • 2017-09-18
              • 1970-01-01
              相关资源
              最近更新 更多