【问题标题】:Java db4o - fill jTableJava db4o - 填充 jTable
【发布时间】:2014-06-13 10:02:31
【问题描述】:

我正在开发一个具有 db4o 文件数据库的应用程序,但现在我卡住了,因为我需要用数据库文件中的信息填充 Swing JTable,但我无法弄清楚。

在 SQL 代码中,您使用 setModelFromResultSet 方法来更新表中的数据,但是 db4o 呢?...

我有一个返回 ObjectSet 的本机查询。我可以用它来填充表格吗?...或者将其转换为 ResultSet?...或者可能是一个数组?

帮帮我吧,我没办法了。

提前致谢, 代码如下...

public void showAll() {
    String DB4OFILENAME = "C:/cemiGEST/Databases/PessoasDB.cmg";

    File folder = new File("C:/cemiGEST/Databases/");
    if (!folder.exists()) {
        folder.mkdirs();
    }

    Db4oEmbedded.newConfiguration().common().messageLevel(0);
    ObjectContainer db = Db4oEmbedded.openFile(
            Db4oEmbedded.newConfiguration(), DB4OFILENAME);

    try {
        // Native Query (NQ)
        ObjectSet<Pessoa> tudo = db.query(new Predicate<Pessoa>() {
            public boolean match(Pessoa pessoa) {
                return true;
            }
        });
        // shows NQ result
        for (Pessoa pessoa : tudo) {
            System.out
                    .println("\n----------------------------------------");
            System.out.println(pessoa);
        }

    } finally {
        db.close();
    }
}

编辑 1: 据我了解,db4o 没有表的概念,因此我找到了一种解决方法来从 ObjectSet 中填充表。它正在工作,但数据库文件应该有数千(或数百万)行,这肯定会在逐行填充表时导致(非常)大的性能问题,这对我来说不是一个选择。性能是导致我放弃 HSQL 并尝试使用 db4o 的主要因素。

对我的下一步行动有什么想法吗?

填充表格的代码如下...

public void populateTableFromObjectSet(ObjectSet<Pessoa> os) {
        DefaultTableModel table = (DefaultTableModel) tblDB.getModel();

        int nPessoas = os.size();
        int nPes = 0;
        for (int i = 0; i < nPessoas; i++) {
            table.setValueAt(os.get(i).getIdPessoa(), nPes, 0);
            table.setValueAt(os.get(i).getNome(), nPes, 1);
            table.setValueAt(os.get(i).getApelidos(), nPes, 2);
            table.setValueAt(os.get(i).getDataM(), nPes, 3);
            table.setValueAt(os.get(i).getECivil(), nPes, 4);
            table.setValueAt(os.get(i).getIdade(), nPes, 5);
            table.setValueAt(os.get(i).getPai(), nPes, 6);
            table.setValueAt(os.get(i).getMae(), nPes, 7);
            table.setValueAt(os.get(i).getNaturalidade(), nPes, 8);
            table.setValueAt(os.get(i).getMorada(), nPes, 9);
            table.setValueAt(os.get(i).getSexo(), nPes, 10);
            table.setValueAt(os.get(i).getIDSepultura(), nPes, 11);
            nPes++;
            table.addRow(new Object[] { null, null, null, null, null, null,
                    null, null, null, null, null, null });
        }
    }

【问题讨论】:

    标签: java database swing jtable db4o


    【解决方案1】:

    使用 SQL 代码,您可以使用 setModelFromResultSet 方法更新表中的数据,

    setModelFromResultSet() 只是某人编写的用于从 ResultSet 读取数据的方法。

    但是 db4o 呢?...

    您需要编写自己的方法。我从未使用过该类,所以我不知道有哪些方法可用,但我确信这些方法与使用真实数据库时相似。

    您已经有一个 for 循环,所以我猜这是针对返回的每个 row 的数据。因此,现在您需要弄清楚如何访问给定行的每个 column 中的数据。然后您可以创建要添加到表中的 TableModel。

    也许Table From Database 中的TableFromDatabaseExample.java 可以帮助您。它向您展示了如何使用两个循环来构造代码,以通过创建向量来获取行和列数据。您应该能够根据自己的目的修改代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 2020-02-21
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2012-10-31
      相关资源
      最近更新 更多