即使查询数据,DefaultTableModel 也是空的
Posted
技术标签:
【中文标题】即使查询数据,DefaultTableModel 也是空的【英文标题】:DefaultTableModel is empty even tho data is queried 【发布时间】:2016-11-17 13:30:34 【问题描述】:我尝试在 DefaultTableModel 类的帮助下将我的 ResultSet 数据放入 JTable。作为解决方案,我在 *** 上找到了一个解决方案,但对其进行了一些修改(此处并不真正相关):
public static DefaultTableModel buildTableModel(ResultSet rs)
try
ResultSetMetaData metaData = rs.getMetaData();
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount;++column)
columnNames.add(metaData.getColumnName(column));
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next())
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount;++columnIndex)
vector.add(rs.getObject(columnIndex));
data.add(vector);
return new DefaultTableModel(data, columnNames);
catch(SQLException e)
e.printStackTrace();
return new DefaultTableModel(new Vector<>(), new Vector<>());
当我调试这段代码时,我能够看到:
ResultSetrs
有数据,
ColumnNames
已填充,
RowCount 为零
我认为问题出在这一行vector.add(rs.getObject(columnIndex));
看起来我的向量变空了,因为 getObject()
已经没有返回任何数据。
有人可以帮我解决这个问题或解释问题出在哪里吗?当我将生成的 DefaultTableModel 绑定到我的 JTable 时,它是空的(不显示数据)。
【问题讨论】:
DefaultTableModel
在现有方法中是否没有行?
是的,行数为零@dev-null。
代码看起来很合理。您需要添加调试代码来验证您的循环是否按预期执行。如果行数为零,这告诉我 ResultSet 是空的。
ResultSet 不为空,行数也不为空。只是 .add() 导致了一个空数据集......为什么!?
行数是多少?将每个对象添加到向量时是否显示其值?这将确认 Vector 已创建。 add()
方法不是问题。我们帮不了你。您需要自己调试代码。在每个循环和每个 if 语句中添加 System.out 语句,以准确查看正在执行的代码。我刚刚注意到的一件事。为什么用++columnIndex
代码通常是columnIndex++
。
【参考方案1】:
我建议使用 AbstractTableModel 作为基础。几年前,我在 Sun 的示例中发现了一个名为 JDBCAdapter.java 的类。这门课做的,你想要的。在网上搜索这门课,你会得到一些满足你大部分需求的东西。如果您的应用程序应该能够将更改写回数据库,但只是为了显示表就可以了,这可能是一个挑战。
【讨论】:
【参考方案2】:我不久前才发现问题:问题在于光标设置为最后一行,因为其他方法已经迭代了相同的 ResultSet,因此必须使用第一种方法再次将光标设置为第一行ResultSet 类。
【讨论】:
对于其他阅读本文的人,这就是您立即将 ResultSet 复制到 List 的原因。传递 ResultSet 是危险的。 感谢您的提示@GilbertLeBlanc!我很少这样做,但不知道这是通常的做法。现在我更聪明了;)。以上是关于即使查询数据,DefaultTableModel 也是空的的主要内容,如果未能解决你的问题,请参考以下文章
应该在哪里定义我的可选 DefaultTableModel 方法?
Java Swing 如何使用DefaultTableModel交替刷新JTable?