Andrid数据库框架——greenDAO(二)

来源:互联网 发布:乒乓球 知乎 编辑:程序博客网 时间:2024/05/27 09:46

上一篇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传入相应的参数来方便的操作数据库了。

0 0
原创粉丝点击