#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 из базы данных. В нем показано, как структурировать код с помощью двух циклов для получения данных строк и столбцов путем создания векторов. Вы должны иметь возможность изменять код для своих целей.