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的可以到我的下載中心下載.