数据库更新问题解答

3
我有一个使用Java、JSP和Servlets实现的Web应用程序。每当数据库表中有更新时,我的DAO中的ArrayList应该被更新。是否有更好的解决方案?
解决方案:
  1. 在bean中创建一个线程并查询数据库,如果发现更新,则重新填充ArrayList。
  2. 从客户端使用轮询概念发送Ajax请求。
请告知我解决方案,如果可能的话,请使用任何框架。
2个回答

1

在你的DAO中使用ArrayList?这真的不太对。DAO类本身不应该持有任何数据。你也不应该将数据存储在会话中,而是让客户端在每个新的HTTP请求上加载它。如果你遇到了任何性能问题,可以通过使用连接池和必要时使用第二级缓存来解决。

至于在更新时触发其中一个或另一个,有几种方法可以实现。在服务器端重新填充“数组列表”至少没有意义。请求必须来自客户端。Ajax轮询确实是最好的方法之一。另一种方法是使用<meta http-equiv="refresh" content="60">头,在间隔(例如每分钟一次)刷新JSP页面,以便从数据库重新查询数据。这是最简单但最不用户友好的方法。

至于框架,我建议使用jQuery和/或JSF。


1
首先,根据BalusC的建议,您真的不应该在DAO中存储任何数据!这是一个DAO,这个类的主要目的是查询数据库以检索数据,理解这个概念将有助于您大大地弄清如何实现更新。
至于更新方面,您需要考虑您的应用程序将如何工作。是否会频繁更新用户打算查看的数据库,例如得分板,因此必须半实时运行更新线程(如果使用Java),或者如果使用JSP Servlets,则上述方法将是一个很好的折衷方案。如果您的应用程序是用户驱动的,则建议在用户第一次请求时检索数据,然后除非用户查看该页面,否则不再检索数据。我想您的设置足以满足此需求,因此不需要任何额外的编码。
请不要通过线程不断重新填充数组列表,考虑到这对性能甚至可维护性的影响。
在考虑数据库访问时,我使用这个作为一个经验法则:实时应用与用户驱动的应用需要不同的模型。

感谢您的回答。我无法理解更新线程和上述方法中的以下行:“考虑您的应用程序将如何工作,是否会频繁更新用户打算查看的数据库,例如得分板,因此必须半实时运行,为此可能需要运行更新线程(如果使用Java),或者如果使用JSP Servlets,则上述方法是一个很好的折衷方案。” - Dead Programmer
1
所以基本上我的意思是,如果您的应用程序旨在实时显示数据并且数据肯定会有重要的更改,则需要更新线程,否则进行基于请求的更新将更容易,希望这能帮助Suresh。谢谢Chris。 - Chris
半实时:当您在Java或JSP上说更新线程时,客户端将如何查看最新数据。我的意思是代码逻辑。 - Dead Programmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接