android面向对象数据库db40日趋成熟.这里简单写了一个demo供大家参考.
首先,定义了一个操作数据库的带泛型T的接口.这一步并不是必须的,但是有通用的好处.
package cn.welcone.mobileguarder.dao; import java.io.File; import java.util.List; import android.app.Application; import android.content.Context; import cn.welcone.mobileguarder.MyApplication; import com.db4o.Db4oEmbedded; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import com.db4o.query.Predicate; public class BaseDb40Helper<T> implements IDb40Helper<T>{ private ObjectContainer objectContainer; private Context context; public String getDB4Path(String databaseName){ return new File(context.getExternalFilesDir(null),databaseName+".data").getPath(); } public BaseDb40Helper( Context context,String databaseName) { this.context = context; objectContainer = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), getDB4Path(databaseName)); } @Override public void add(List<T> ts) { for (T t : ts) { objectContainer.store(t); } } /** * 采用回调的方式来查询结果 * 传入一个predicate对象,在其中书写条件即可 */ public List<T> get(Predicate<T> predicate) { return objectContainer.query(predicate); }; /* * 根据查询条件进行得到一些结果集,然后对这些进行操作,最后再全部存储起来. */ @Override public void update(Predicate<T> predicate , UpdateOperation<T> updateOperation) { List<T> resultSet = get(predicate); for (T t : updateOperation.updateOPeration(resultSet)) { objectContainer.store(t); } } @Override public void delete(Predicate<T> predicate) { for (T t : objectContainer.query(predicate)) { objectContainer.delete(t); } } }
然后,写了一个实现类
package cn.welcone.mobileguarder.dao; import java.io.File; import java.util.List; import android.app.Application; import android.content.Context; import cn.welcone.mobileguarder.MyApplication; import com.db4o.Db4oEmbedded; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import com.db4o.query.Predicate; public class BaseDb40Helper<T> implements IDb40Helper<T>{ private ObjectContainer objectContainer; private Context context; public String getDB4Path(String databaseName){ return new File(context.getExternalFilesDir(null),databaseName+".data").getPath(); } public BaseDb40Helper( Context context,String databaseName) { this.context = context; objectContainer = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), getDB4Path(databaseName)); } @Override public void add(List<T> ts) { for (T t : ts) { objectContainer.store(t); } } /** * 采用回调的方式来查询结果 * 传入一个predicate对象,在其中书写条件即可 */ public List<T> get(Predicate<T> predicate) { return objectContainer.query(predicate); }; /* * 根据查询条件进行得到一些结果集,然后对这些进行操作,最后再全部存储起来. */ @Override public void update(Predicate<T> predicate , UpdateOperation<T> updateOperation) { List<T> resultSet = get(predicate); for (T t : updateOperation.updateOPeration(resultSet)) { objectContainer.store(t); } } @Override public void delete(Predicate<T> predicate) { for (T t : objectContainer.query(predicate)) { objectContainer.delete(t); } } }
最后使用的时候,将BaseDb40Helper new出来即可.
需要注意的问题是:
1)需要下载db40支持的jar包.加到libs下面即可使用
2)domain必须是标准的javabean
参考文档在下载包doc目录下.
需要该demo的可以到我的下载中心下载.