上一篇Andrid数据库框架——greenDAO(一)对熟悉了下greenDao的简单使用。一般我们项目中使用第三方框架的时候都会在封装一层。一是使用起来更加方便 二是也方便以后万一我们换别的框架只需更改封装类 具体业务类不用动。
定义一个DaoManager
package com.chs.greendaotext;
import android.content.Context;
import com.chs.greendaotext.db.DaoMaster;
import com.chs.greendaotext.db.DaoSession;
import org.greenrobot.greendao.query.QueryBuilder;
/**
* 1、创建数据库
* 2、创建数据库的表
*/
public class DaoManager {
private static final String DB_NAME="hellouf_db";//数据库名称
private volatile static DaoManager manager;//防止多线程同时访问
private static DaoMaster.OpenHelper helper;
private static DaoMaster daoMaster;
private static DaoSession daoSession;
private Context context;
/**
* 使用单例模式获得操作数据库的对象
* @return
*/
public static DaoManager getInstance(){
if (manager==null){
synchronized (DaoManager.class){
if (manager==null){
manager = new DaoManager();
}
}
}
return manager;
}
public void init(Context context){
this.context = context;
}
/**
* 判断是否存在数据库,如果没有则创建数据库
* @return
*/
public DaoMaster getDaoMaster(){
if (daoMaster==null){
DaoMaster.OpenHelper helper = new DaoMaster.OpenHelper(context,DB_NAME,null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
/**
* 完成对数据库的添加、删除、修改、查询的操作,仅仅是一个接口
* @return
*/
public DaoSession getDaoSession(){
if (daoSession==null){
if (daoMaster==null){
daoMaster = getDaoMaster();
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
/**
* 打开输出日志的操作,默认是关闭的
*/
public void setDebug(){
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
}
/**
* 关闭所有的操作,数据库开启的时候,使用完毕了必须要关闭
*/
public void closeConnection(){
closeHelper();
closeDaoSession();
}
public void closeHelper(){
if (helper!=null){
helper.close();;
helper = null;
}
}
public void closeDaoSession(){
if (daoSession!=null){
daoSession.clear();;
daoSession = null;
}
}
}
然后为每个实体类(其实每个实体类就是一个表)建立一个操作增删改查的util类来管理 比如我们上一篇中的Note类 建立一个NoteUtil
package com.chs.greendaotext;
import android.content.Context;
import android.util.Log;
import com.chs.greendaotext.db.NoteDao;
import org.greenrobot.greendao.query.Query;
import java.util.List;
/**
* 完成对某一张表的具体操作,ORM 操作的是对象,Note
*/
public class NoteUtils {
private DaoManager manager;
public NoteUtils(Context context) {
manager = DaoManager.getInstance();
manager.init(context);
}
/**
* 完成对数据库中note 表的插入操作
* @return
*/
public boolean insert(Note note) {
boolean flag = false;
flag = manager.getDaoSession().insert(note) != -1 ? true : false;
Log.i("CommonUtils", "----insertNote--result is -->>" + flag);
return flag;
}
/**
* 插入多条记录,需要开辟新的线程
* @param Notes
* @return
*/
public boolean insertMultNote(final List<Note> Notes){
boolean flag = false;
try{
manager.getDaoSession().runInTx(new Runnable() {
@Override
public void run() {
for(Note Note:Notes){
manager.getDaoSession().insertOrReplace(Note);
}
}
});
flag = true;
}catch(Exception e){
e.printStackTrace();
}
return flag;
}
/**
* 完成对Note的某一条记录的修改
* @return
*/
public boolean updateNote(Note note){
boolean flag = false;
try{
manager.getDaoSession().update(note);
flag = true;
}catch(Exception e){
e.printStackTrace();
}
return flag;
}
/**
* 查詢
* @return
*/
public List<Note> getNoteList(){
Query<Note> notesQuery = manager.getDaoSession().getNoteDao().queryBuilder().build();
return notesQuery.list();
}
/**
* 根据id刪除
* @param id
*/
public void delete(int id){
List<Note> userList = manager.getDaoSession().getNoteDao().queryBuilder().where(NoteDao.Properties.Id.eq(id)).build().list();
for (Note note : userList) {
manager.getDaoSession().getNoteDao().delete(note);
}
}
/**
* 刪除
* @return
*/
public boolean deleteNote(Note note) {
boolean flag = false;
try {
//按照指定的id进行删除 delete from Note where _id = ?
manager.getDaoSession().delete(note);
//manager.getDaoSession().deleteAll();//删除所有的记录
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
*刪除所有
*/
public void deleteAllNote(Class cls){
manager.getDaoSession().deleteAll(cls);
}
/**
* 返回多行记录
*
* @return
*/
public List<Note> listAll() {
return manager.getDaoSession().loadAll(Note.class);
}
/**
* 按照主键返回单行记录
*
* @param key
* @return
*/
public Note listOneNote(long key) {
return manager.getDaoSession().load(Note.class, key);
}
}
使用:
比如插入:
NoteUtils noteUtils= new NoteUtils (this);
for(int i = 0;i<10;i++){
Note note = new Note(null,"item"+i,"itemsss");
noteUtils.insert(note);
}
OK 封装完毕 我们就可以使用对应的util传入相应的参数来方便的操作数据库了。