我使用两种不同的方式来查询db4o中的对象,我想讨论它.
1)在第一个例子中,我创建了一个ObjectContainer实例,我打开连接,然后关闭它.
ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), "User");
ObjectSet result = db.queryByExample(user);
db.close();
Run Code Online (Sandbox Code Playgroud)
2)在第二个例子中,我创建了一个ObjectServer,让连接在应用程序的整个生命周期内打开.我还从ObjectServer打开ObjectContainer,进行查询然后关闭它:
ObjectServer userDb = Db4oClientServer.openServer(Db4oClientServer.newServerConfiguration(), "User", 0);
ObjectContainer client = client = userDb.openClient();
ObjectSet result = client.queryByExample(user);
client.close();
Run Code Online (Sandbox Code Playgroud)
-
两种方法有什么主要区别?如果我从不关闭ObjectServer,这是危险的吗?
在我看来,第二种方法更好,因为如果两个不同的实例调用第一个例子中显示的方法,第二个调用者将获得异常,导致数据库被锁定,但在第二个例子中我没有这样的问题.由于我对db4o没有太多经验,我更愿意问我是否正确.
Vag*_*aus 11
在整个应用程序生命周期中保持连接打开时,db4o的效果最佳.
如果你检索一个对象,关闭数据库,重新打开它并再次存储该对象db4o将不会意识到该对象已经存储(因为你关闭了连接以及db4o的引用系统)并且将存储第二个实例.
另一个问题(如果你在嵌入式模式下运行db4o)是打开数据库是一个耗时的操作,所以,如果你继续打开/关闭数据库肯定会有性能问题(另一方面,打开客户端连接不是这样的昂贵的,所以应该没有任何问题).