public static ObjectSet retrieveObjectByFieldPramaters(ObjectContainer db,<o:p></o:p>
Object obj) {<o:p></o:p>
<o:p> </o:p>
ObjectSet os = db.get(obj);<o:p></o:p>
return os;<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// QE方式根据参数String field(字段名), String str(参数值),查找对象数据<o:p></o:p>
public static ObjectSet queryObjectQEByFieldPramatersString(<o:p></o:p>
ObjectContainer db, Class cls, String field, String value) {<o:p></o:p>
Query query = db.query();<o:p></o:p>
query.constrain(cls);<o:p></o:p>
query.descend(field).constrain(value);<o:p></o:p>
ObjectSet os = query.execute();<o:p></o:p>
return os;<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// QE方式根据参数String field(字段名), Integer x(参数值),查找对象数据<o:p></o:p>
public static ObjectSet queryObjectQEByFieldPramatersInteger(<o:p></o:p>
ObjectContainer db, Class cls, String field, Integer value) {<o:p></o:p>
Query query = db.query();<o:p></o:p>
query.constrain(cls);<o:p></o:p>
query.descend(field).constrain(value);<o:p></o:p>
/*<o:p></o:p>
* constrain: 词性及解释 Part of speech and defination vt. 强迫, 限制, 关押<o:p></o:p>
* <o:p></o:p>
*/<o:p></o:p>
return query.execute();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// 否定方式QE检索<o:p></o:p>
public static ObjectSet queryByNegation(ObjectContainer db, Class cls,<o:p></o:p>
String field, String value) {<o:p></o:p>
Query query = db.query();<o:p></o:p>
query.constrain(cls);<o:p></o:p>
query.descend(field).constrain(value).not();<o:p></o:p>
/*<o:p></o:p>
* descend: 词性及解释 Part of speech and defination vi. 下降, 世代相传, 屈尊, 袭击 vt.<o:p></o:p>
* 下降 【法】 把财产传给, 遗传<o:p></o:p>
*/<o:p></o:p>
<o:p> </o:p>
return query.execute();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// conjunction方式QE检索<o:p></o:p>
public static ObjectSet retrieveByConjunction(ObjectContainer db,<o:p></o:p>
Class xls, Object obj1, Object obj2, String f1, String f2) {<o:p></o:p>
Query query = db.query();<o:p></o:p>
query.constrain(xls);<o:p></o:p>
Constraint constr = query.descend(f1).constrain(obj1);<o:p></o:p>
query.descend(f2).constrain(obj2).and(constr);<o:p></o:p>
/*<o:p></o:p>
* conjunction: 词性及解释 Part of speech and defination n. 连接词, 联合, 结合 【计】<o:p></o:p>
* 合取<o:p></o:p>
* <o:p></o:p>
*/<o:p></o:p>
return query.execute();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// Disjunction方式QE检索,即相当于SQL中的OR查询<o:p></o:p>
public static ObjectSet retrieveByDisjunction(ObjectContainer db,<o:p></o:p>
Class xls, String f1, Object value1, String f2, Object value2) {<o:p></o:p>
Query query = db.query();<o:p></o:p>
query.constrain(xls);<o:p></o:p>
Constraint constr = query.descend(f1).constrain(value1);<o:p></o:p>
query.descend(f2).constrain(value2).or(constr);<o:p></o:p>
/*<o:p></o:p>
* Disjunction: [] 词性及解释 Part of speech and defination n. 分离, 分裂, 分断<o:p></o:p>
* <o:p></o:p>
*/<o:p></o:p>
return query.execute();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// Comparison方式QE检索,即检索当f1字段值大于value1的对象数据<o:p></o:p>
public static ObjectSet retrieveByComparison(ObjectContainer db, Class xls,<o:p></o:p>
String f1, Object value1) {<o:p></o:p>
Query query = db.query();<o:p></o:p>
query.descend(f1).constrain(value1).greater();<o:p></o:p>
/*<o:p></o:p>
* comparison: 词性及解释 Part of speech and defination n. 比较, 对照, 比喻 【经】 比较,<o:p></o:p>
* 对比<o:p></o:p>
* <o:p></o:p>
*/<o:p></o:p>
return query.execute();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// 默认字段值QE检索<o:p></o:p>
public static ObjectSet retrieveByDefaultFieldValue(ObjectContainer db,<o:p></o:p>
Class xls, String f1, Object v1) {<o:p></o:p>
Query query = db.query();<o:p></o:p>
query.constrain(xls);<o:p></o:p>
query.descend(f1).constrain(v1);<o:p></o:p>
<o:p> </o:p>
return query.execute();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// Ascending排序方式检索对象数据库中的所有对象数据<o:p></o:p>
public static ObjectSet retrieveSortedOrderByAscending(ObjectContainer db,<o:p></o:p>
Class xls, String f1) {<o:p></o:p>
Query query = db.query();<o:p></o:p>
query.constrain(xls);<o:p></o:p>
query.descend(f1).orderAscending();<o:p></o:p>
<o:p> </o:p>
return query.execute();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// Descending排序方式检索对象数据库中的所有对象数据<o:p></o:p>
public static ObjectSet retrieveSortedOrderByDescending(ObjectContainer db,<o:p></o:p>
Class xls, String f1) {<o:p></o:p>
Query query = db.query();<o:p></o:p>
query.constrain(xls);<o:p></o:p>
query.descend(f1).orderDescending();<o:p></o:p>
<o:p> </o:p>
return query.execute();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
// 清除对象数据库中所有元对象Class所对应的对象数据<o:p></o:p>
public static void clearDatabase(ObjectContainer db, Class xls) {<o:p></o:p>
ObjectSet result = db.get(xls);<o:p></o:p>
while (result.hasNext()) {<o:p></o:p>
db.delete(result.next());<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
/**<o:p></o:p>
* 将ObjestSet的对象存储到List中<o:p></o:p>
* <o:p></o:p>
* @param 结果集<o:p></o:p>
*/<o:p></o:p>
public static List convertObjectSet(ObjectSet os) {<o:p></o:p>
java.util.List list = new java.util.ArrayList(os.size());<o:p></o:p>
while (os.hasNext()) {<o:p></o:p>
list.add(os.next());<o:p></o:p>
}<o:p></o:p>
return list;<o:p></o:p>
<o:p> </o:p>
}<o:p></o:p>
<o:p></o:p>
/** <o:p></o:p>
* 打开本地库 <o:p></o:p>
* <o:p></o:p>
*/ <o:p></o:p>
public static ObjectContainer openLocalDb(ObjectContainer db){ <o:p></o:p>
db = Db4o.openFile(DB4OFILENAME); <o:p></o:p>
return db;<o:p></o:p>
} <o:p></o:p>
<o:p></o:p>
/** <o:p></o:p>
* 关闭库 <o:p></o:p>
* <o:p></o:p>
*/ <o:p></o:p>
public static void closeDb(ObjectContainer db){ <o:p></o:p>
if(db!=null) db.close(); <o:p></o:p>
} <o:p></o:p>
<o:p> </o:p>
}<o:p></o:p>
<o:p> </o:p>
步3:编写持久化接口:<o:p></o:p>
/**
*
*/
package com.store;
<o:p> </o:p>
import java.util.Collection;
<o:p> </o:p>
/**
* @author gyc
*
*/
public interface DbStoreIf {
//CRUD方法
public boolean storeObject(Object obj);
public boolean deleteObject(Object obj);
public boolean updateObject(Object obj);
public Object findObject(Object obj);
public Collection findAllObjects(Object obj);
/*
* 根据特殊条件检索对象
&nb