繁体   English   中英

使用Jackcess读取Access文件并使用数据创建Jtable

[英]Reading a Access file using Jackcess and creating a Jtable with the data

我目前正在开发一个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的一些半好的解决方案,但我无法理解它。 有什么建议吗? 或者我应该按照目前的思路继续留在车道上?

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

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

  • 你需要创建两个对象,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM