Java 一次调用所有DB查询与逐个调用DB查询
我脑子里有一个大问题。情况是这样的 我有一个JTabbedPane,其中有5个选项卡。所有5个选项卡都包含JTables,所有表都是从数据库检索到的数据馈送的。所有这些表都将显示与特定年份相关的数据,因此我有一个包含年份的JComboBox 我已经为所有选项卡分配了ComponentListeners,因此每当选项卡可见时,它都会调用数据库并更新选项卡内的表。就像下面一样Java 一次调用所有DB查询与逐个调用DB查询,java,database,swing,user-interface,jdbc,Java,Database,Swing,User Interface,Jdbc,我脑子里有一个大问题。情况是这样的 我有一个JTabbedPane,其中有5个选项卡。所有5个选项卡都包含JTables,所有表都是从数据库检索到的数据馈送的。所有这些表都将显示与特定年份相关的数据,因此我有一个包含年份的JComboBox 我已经为所有选项卡分配了ComponentListeners,因此每当选项卡可见时,它都会调用数据库并更新选项卡内的表。就像下面一样 private class DisplayAllRevenue extends ComponentAdapter {
private class DisplayAllRevenue extends ComponentAdapter {
@Override
public void componentShown(ComponentEvent e) {
}
}
private class DisplayCompetitorRevenue extends ComponentAdapter {
@Override
public void componentShown(ComponentEvent e) {
}
}
private class DisplayMonthRevenue extends ComponentAdapter {
@Override
public void componentShown(ComponentEvent e) {
}
}
现在,在我前面的一个问题中,一位S.O用户告诉我,这将进行大量的数据库调用,因为每次选择选项卡时,表都在调用数据库。因此,我考虑删除ComponentListeners,并在用户从JComboBox中选择日期后更新所有表
这会受到数据库流量的影响吗?如果我在另一个线程中运行它呢???通常,我的数据库查询如下->
你对此有什么建议?这样想吧。如果用户从未打开其中一个选项卡,会发生什么情况?现在,在我前面的一个问题中,一位S.O用户告诉我,这将进行大量的数据库调用,因为每次选择选项卡时,表都在调用数据库。。。而不是一下子把他们都叫来?为什么不在加载结果后将其缓存,直到关键因素发生变化(如过滤器或用户刷新结果…@MadProgrammer:那么加载该选项卡的数据是没有用的?没错。我们也遇到了类似的问题,我们加载了多个数据选项卡,但在日常工作中,许多用户不太可能需要大部分数据。我们选择实现一种延迟加载方法来解决这个问题,只根据需要物理加载选项卡的数据,缓存结果,直到关键过滤器元素更改或用户根据需要刷新选项卡的数据……是的。考虑这一点,为每个选项卡加载数据所需的工作量与每个选项卡相对应,因为需求可能是相同的。有人可能会说,您可以使用一个连接来完成所有这些操作,但是对于延迟加载方法,您可以做同样的事情,您得到的好处是,您的程序看起来更快,因为您不是在等待加载可能看不到的数据以及组件在更新时可能引入的开销well@dic19同意,ChangeListener是更好的选择,SwingWorker是正确的方法