我有一个场景,我的Java程序必须不断地与数据库表通信,例如我的Java程序必须在运行时向其添加新行时获取我的表的数据。我的程序和数据库之间应该有持续的通信。
如果表最初有10行,并且用户添加了2行,则必须检测到这一行并返回行。
我的程序不应该使用AJAX和计时器。
答案 0 :(得分:3)
如果您使用的数据库是Oracle,请考虑使用调用triggers的java stored procedure,通知您的客户端数据库中的更改(使用JMS,RMI或者你想要的任何东西。)
答案 1 :(得分:2)
没有Ajax和计时器,似乎没有完成这项任务。
我也面临同样的问题,我需要在服务器更改时将一些数据从服务器推送到客户端。
为此,您可以使用Server push AKA “Comet”编程。
在实践中
同样要监控数据库更改,您可以有两件事,
Quartz Scheduler
)基本上,客户端无法知道服务器端发生的任何事情,因此您必须推送一些数据或事件来告诉客户i have some new data, please call some method
。它的通知。所以请通过事件通知检查彗星/服务器推送。
希望这会有所帮助。
感谢。
答案 2 :(得分:0)
真的不是最简单的问题。
让我们把它分成两个小问题:
1)如何在没有定时器和ajax的情况下重新加载
2)如何实现服务器端
无法从服务器通知客户端。因此,您需要使用flash或silverlight或JavaFX或Applet来创建胖客户端。如果Ajax的问题在于您不知道如何使用它来解决这个问题,那么您可以研究一些现成的jsp标记库或具有ajax支持的jsf组件。
如果您只有一台服务器,则只需添加一个缓存。如果有多个服务器,则考虑使用分布式缓存。
答案 3 :(得分:0)
如果您拥有流量较低的数据库,则可以实现一个快速检查数据库更新的线程(轮询)。
如果你有一个高流量的数据库,我不建议这样做,因为轮询会产生更多的额外流量。
答案 4 :(得分:0)
服务器通知客户端不是一个好主意(考虑具有1000个客户端的方案)。你是否使用了一些持久层,或者你必须坚持使用纯粹的JDBC?
答案 5 :(得分:0)
如果您在MYSQL中打开了二进制日志,则可以查看数据库中发生的所有事务。
答案 6 :(得分:0)
一种可移植的方法是添加一个列时间戳(创建日期),指示该行何时添加到表中。在初始加载内容后,您只需轮询where子句current_time> = create_date的新内容。如果行可以具有相同的时间戳,则需要在添加重复项之前对其进行过滤。