1

我目前正在开发一个读取 Access 文件并使用收集的数据构建 Jtable 模型的 Java 应用程序。我以前对 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 小时的连续工作,我要么对一个明显的解决方案视而不见,要么我做错了什么。

我偶然发现了一些使用迭代器的半好解决方案,但我无法掌握它。对此有何建议?还是我应该按照我目前的思路留在车道上?

4

1 回答 1

3
  • JTable(视图的值存储在XxxTableModel,在您的情况下使用DefaultTableModel)是行基数Object

  • TableColumn(值存储在TableColumnModel)将行划分为列

  • 你需要创建两个对象,

    1. Vector<String> columnNames(只有一行)用于列标识符Table table = db.getTable("Table1");
    2. 在内部循环以使用Table table = db.getTable("Table1");填充二维,请注意第一个。代码行 insode 循环必须是,你必须创建一个新的,否则你会添加相同的 rown_times,最后一个代码行应该是 data.add(vector)Vector<Vector<Object>> data = new Vector<Vector<Object>>();Vector<Object> vector = new Vector<Object>();vector = new Vector<Object>();Vector

.

于 2013-12-22T13:13:26.317 回答