我目前正在开发一个Java应用程序,它读取Access文件并使用收集的数据构建Jtable模型。我以前用Excel文件做过同样的事情,但是当我尝试使用Jackcess时,它有点不同,我遇到了一些问号。
到目前为止我的工作:
public class AccessModel{
public DefaultTableModel getAccessModel() throws IOException {
Database db = DatabaseBuilder.open(new File("MyFile.accdb"));
Vector<String> columnNames = new Vector<String>();
Vector<String> vector = new Vector<String>();
Vector<Vector<String>> data = new Vector<Vector<String>>();
StringBuilder output = new StringBuilder();
Table table = db.getTable("Table1");
for (Column column : table.getColumns()) { // get the table column names
output.append(column.getName());
output.append("\n");
columnNames.add(column.getName());
}
for (Column column : table.getColumns()) { // get the column rows and values
vector.add(column.getRowValue(table.getNextRow()).toString());
}
data.add(vector);
// return the model to Gui
DefaultTableModel accessModel = new DefaultTableModel(data, columnNames);
return accessModel;
}
}
正如您所看到的,此方法只会迭代第一行,然后退出循环。由于12个小时的直接工作,我或者对一个明显的解决方案视而不见,或者我正在做一些非常错误的事情。
我偶然发现了使用Iterator的一些半好的解决方案,但我无法理解它。有什么建议吗?或者我应该按照目前的思路继续留在车道上?
答案 0 :(得分:3)
JTable
(视图的值存储在XxxTableModel
中,在您的情况下使用DefaultTableModel
)是行基Object
,
TableColumn
(值存储在TableColumnModel
中)将行划分为列
您需要创建两个对象
Vector<String> columnNames
Table table = db.getTable("Table1");
(只有一行)
Table table = db.getTable("Table1");
内循环以使用Vector<Vector<Object>> data = new Vector<Vector<Object>>();
填充二维Vector<Object> vector = new Vector<Object>();
,请注意第一项。代码行insode循环必须是vector = new Vector<Object>();
,你必须创建一个新的Vector
,否则你将添加相同的rown_times,最后的代码行应该是data.add(vector)