在JTable中显示数据库中的数据
我正在使用jdbc编写程序,该程序将成为数据库的接口(类似于CRUD应用程序)。我假设我必须编写一个类(例如DBCLass
),该类将对数据库执行所有操作(select,
update, insert,
delete以及可能会简化为这些操作的某些其他逻辑)。用户界面由一组表和一些按钮组成。要使用Jtable,我需要实现一个类(例如Model
),它是AbstractTableModel的子类。因此,此类将向用户显示我的数据。我需要为数据库架构中的所有表实现这种模型。我不想在向用户显示数据的类中编写逻辑,并且我认为在此类中编写逻辑代码不是一件好事。但是将所有数据从db表加载到内存(例如ArrayList)然后在Model
。因此,我需要一个建议,这是解决此类问题的最佳方法。
一个小例子:
Statement stmt = ....;ResaultSet rs = stmt.executeQuery("SELECT * FROM table1");
javadoc说executeQuery方法返回一个ResultSet对象,该对象包含由给定查询产生的数据。因此,如果我们有大量数据(其大小大于虚拟机允许的大小),则程序将失败。所以我的问题仍然很重要
回答:
下载SQuirreL SQl的源代码,并查看表的实现。
注意事项:
数据库表不是Java
JTables。数据库中的表实际上是一个带有项目的集合(骂傻子的人),每个项目都有属性(通常称为“列”,它不是JColumn,它解释了为什么很难映射两者)
。
一组可以增长到任何大小。它没有内在顺序。您可以对其执行很多设置操作,例如:并集,差,子集。
因此,它 不是 表,尤其不是UI表。
没有简单的UI范式可以将“集合”映射到“表”。您可以
加载N条记录并分页浏览结果。
您可以在用户向下滚动时加载更多内容
您可以计算集合的大小并相应地调整滚动条。用户滚动浏览数据时,将从数据库中获取并显示数据。
利弊:
解决方案1最易于实现,也是用户最讨厌的一种。为什么当倒退时他们需要等待再次查看数据?如果每次提取都需要15秒,这尤其令人沮丧。页…等待…页…哎呀!在那里!该死的!等待等待等待返回…等待aaargh。
而且,数据库通常很难分页数据。对于某些查询,性能可能是灾难性的。
解决方案2易于实施,特别是如果您可以ResultSet
永远保持开放。但是,不能100%的时间。如果您将其打开几个小时或一天,它将开始失败。在那之后,DB会认为“哦,吉姆,它已经死了”并关闭连接,您的用户将收到一条不错的错误消息,并且您将得到一个生气的用户。
因此,您也需要在这里进行分页,但不是那么频繁。从积极的方面来说,用户无需再次等待已拥有的数据。重要的一点:如果该集合包含数百万行,则用户直观地了解到,当向下滚动时,他们需要从不同的角度来解决问题。最终,他们会感到疲倦,并寻求更好的解决方案(而不是生你的气,因为您的愚蠢程序无法在少于0.0000000001s的时间内显示1500万行)。
解决方案3再次比#2差。如果表增加,则UI将变得不可用:即使查看滚动条,您也会将您移动到表中的随机位置。因此,它使您的鼠标无用。和您的用户生气。
因此,我通常尝试以下解决方案:
最多读取1000行 另外,如果读取行花费的时间超过1秒,则我将在100行之后停止(因此用户至少要有一些数据)。通常,查询速度很慢,读取结果集几乎不需要时间,但是我喜欢在这里进行防御。
每列的顶部是一个过滤器和一个“ order by”,可以直接映射到SQL。这样,我可以确保如果要按列对数据进行排序,则按所有值(而不只是屏幕上可以看到的值)进行排序。
这使用户可以将大量数据切分成有意义的子集。
以上是 在JTable中显示数据库中的数据 的全部内容, 来源链接: utcz.com/qa/408877.html