Java db4o — заполнить JTable

#java #database #swing #jtable #db4o

#java #База данных #качать #jtable #db4o

Вопрос:

Я разрабатываю приложение, в котором есть файловая база данных db4o, но теперь я застрял, потому что мне нужно заполнить Swing JTable информацией из файла базы данных, и я не могу в этом разобраться.

В коде SQL вы используете метод setModelFromResultSet для обновления данных в таблице, но как насчет db4o ?…

У меня есть собственный запрос, возвращающий ObjectSet. Могу ли я использовать его для заполнения таблицы ?… Или преобразовать его в результирующий набор?… Или, может быть, массив?

Помогите мне здесь, у меня заканчиваются идеи.

Заранее спасибо, ниже приведен код…

 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 });
        }
    }
  

Ответ №1:

С помощью кода SQL вы используете метод setModelFromResultSet для обновления данных в таблице,

setModelFromResultSet() Это просто метод, который кто-то написал для чтения данных из результирующего набора.

но как насчет db4o ?…

Вам нужно написать свой собственный метод. Я никогда не использовал этот класс, поэтому понятия не имею, какие методы доступны, но я уверен, что методы аналогичны при использовании реальной базы данных.

У вас уже есть цикл for, поэтому я предполагаю, что это для каждого row из возвращаемых данных. Итак, теперь вам нужно выяснить, как получить доступ к данным в каждом column для данной строки. Затем вы можете создать TableModel для добавления в таблицу.

Возможно TableFromDatabaseExample.java , вам поможет таблица from из базы данных. В нем показано, как структурировать код с помощью двух циклов для получения данных строк и столбцов путем создания векторов. Вы должны иметь возможность изменять код для своих целей.