预先存在的 jTable 非常慢 - 即使在很少的记录上

Posted

技术标签:

【中文标题】预先存在的 jTable 非常慢 - 即使在很少的记录上【英文标题】:Pre-existing jTable very slow - even on few records 【发布时间】:2016-07-19 04:58:34 【问题描述】:

再次寻求帮助...

我有一个要运行的查询,当我在 Netbeans 中运行它时,它非常快(不到一秒)并且显示信息大约需要一秒。当我运行相同的查询并填充 JTable(在设计时定义,而不是运行时定义)时,速度非常慢。

DB 有大约 600 条记录 - 延迟 20 秒 限制为 10 - 延迟约 10 秒 限制为 1 - 延迟约 3 秒

有没有办法让 Tablemodel “更快”?

我曾考虑过分页,但对于大约 10 条记录,即使延迟 10 秒也不是很好 - 我的代码一定存在固有问题(抱歉,完整的 Java Noob)。

下面是我的代码:

String SQL = "SELECT RecTable.ipkRecNo, RecTable.RecName order by ipkRecNo";

DefaultTableModel defaultModel = (DefaultTableModel) jTable1.getModel();
Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE   ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery( SQL );

int i = 0; 
String PreviousKey = "";
while ( rs.next( ) ) 
i++;
String MyRecNum = "";
String MyRecName = "";

if (rs.getString(1).trim() == PreviousKey.trim() ) 
 else 

MyRecNum = rs.getString(1);
MyRecName = rs.getString(1);

defaultModel.addRow(new Object[]MyRecNum,MyRecName); //1307
 

【问题讨论】:

AbstractTableModel GUI display issue 可能重复。 在后台查询数据库,为example。 【参考方案1】:

addRow 方法的 Javadoc 说明:

在模型中的 row 处插入一行。除非指定了 rowData,否则新行将包含空值。 将生成正在添加的行的通知。

因此,生成了 1307 次事件。这会让你的程序变慢。

【讨论】:

以上是关于预先存在的 jTable 非常慢 - 即使在很少的记录上的主要内容,如果未能解决你的问题,请参考以下文章

使用“NOT IN”时子查询非常慢

并行执行比顺序执行慢,即使代码“很重”

编辑大代码时Rstudio非常慢

即使在批处理执行模式下,Netezza 批处理插入也非常慢

SQLite:即使有索引,大型数据库中的查询也非常慢

非常慢的 MySQL COUNT DISTINCT 查询,即使有索引——如何优化?