【发布时间】: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