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

本文介绍了一个基于GreenDAO的数据库管理类DaoManager的实现方法,并通过NoteUtils类展示了如何对Note实体进行增删改查等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值