使用Java从数据库连续获取数据

时间:2010-05-26 10:44:45

标签: java database

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

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

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

7 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

我也面临同样的问题,我需要在服务器更改时将一些数据从服务器推送到客户端。

为此,您可以使用Server push AKA “Comet”编程。

在实践中

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

同样要监控数据库更改,您可以有两件事,

  1. 某些触发器/计时器(结帐Quartz Scheduler
  2. 事件基础机制,用于在特定事件中推送通道中的数据。
  3. 基本上,客户端无法知道服务器端发生的任何事情,因此您必须推送一些数据或事件来告诉客户i have some new data, please call some method。它的通知。所以请通过事件通知检查彗星/服务器推送。

    希望这会有所帮助。

    感谢。

答案 2 :(得分:0)

真的不是最简单的问题。

让我们把它分成两个小问题:

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

2)如何实现服务器端

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

服务器通知客户端不是一个好主意(考虑具有1000个客户端的方案)。你是否使用了一些持久层,或者你必须坚持使用纯粹的JDBC?

答案 5 :(得分:0)

如果您在MYSQL中打开了二进制日志,则可以查看数据库中发生的所有事务。

答案 6 :(得分:0)

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