建设自己的数据库代码框架 --摘自肖老师博客160304

原文地址:http://blog.csdn.net/xll712/article/details/50592114

书接上回

这里写图片描述

下面是三个类中的全代码:

public interface IDatabase<M,K> {
    boolean insert(M m);
    boolean add(M m);
    List<M> loadAll();    /**
     * 自定义查询
     *
     * @return
     */
    QueryBuilder<M> getQueryBuilder();    /**
     * @param where
     * @param selectionArg
     * @return
     */
    List<M> queryRaw(String where, String... selectionArg);

    boolean deleteAll();
    AbstractDao<M, K> getAbstractDao();
}123456789101112131415161718192021

public abstract class DatabaseManager<M, K> implements IDatabase<M, K> {    private static final String DEFAULT_DATABASE_NAME = "greendao.db";    /**
     * The Android Activity reference for access to DatabaseManager.
     */
    private DaoMaster.DevOpenHelper mHelper;    private DaoSession daoSession;    private SQLiteDatabase database;    private DaoMaster daoMaster;    protected Context context;    protected String dbName;    public DatabaseManager(Context context) {        this.context = context;
        dbName = DEFAULT_DATABASE_NAME;
        getmHelper(context, dbName);
    }    public DatabaseManager(Context context, String dbName) {        this.context = context;        this.dbName = dbName;
        getmHelper(context, dbName);
    }    public DaoMaster.DevOpenHelper getmHelper(Context context, String dbName) {        if (null == mHelper) {
            mHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
        }        return mHelper;
    }    protected void openWritableDb() {
        getWritableDatabase();
        getDaoMaster();
        getDaoSession();
    }    protected SQLiteDatabase getWritableDatabase() {
        database = getmHelper(context, dbName).getWritableDatabase();        return database;
    }    protected DaoMaster getDaoMaster() {        if (null == daoMaster) {
            daoMaster = new DaoMaster(getWritableDatabase());
        }        return daoMaster;
    }    protected DaoSession getDaoSession() {        if (null == daoSession) {
            daoSession = getDaoMaster().newSession();
        }        return daoSession;
    }    public void closeDbConnections() {        if (null == mHelper) {
            mHelper.close();
            mHelper = null;
        }        if (null == daoSession) {
            daoSession.clear();
            daoSession = null;
        }
    }    public void clearDaoSession() {        if (null == daoSession) {
            daoSession.clear();
            daoSession = null;
        }
    }

    @Override    public boolean insert(M m) {        if (null == m){            return false;
        }
        openWritableDb();
        getAbstractDao().insert(m);        return true;
    }

    @Override    public boolean add(M m) {        if (null == m){            return false;
        }
        openWritableDb();
        getAbstractDao().insert(m);        return true;
    }

    @Override    public List<M> loadAll() {
        openWritableDb();        return getAbstractDao().loadAll();
    }

    @Override    public boolean deleteAll() {
        openWritableDb();
        getAbstractDao().deleteAll();        return false;
    }

    @Override    public QueryBuilder<M> getQueryBuilder() {
        openWritableDb();        return getAbstractDao().queryBuilder();
    }

    @Override    public List<M> queryRaw(String where, String... selectionArg) {
        openWritableDb();        return getAbstractDao().queryRaw(where,selectionArg);
    }
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122

public class PersonDatabaseManager extends
        DatabaseManager<Person,Long> {


    public PersonDatabaseManager(Context context) {        super(context);
    }    public PersonDatabaseManager(Context context, String dbName) {        super(context, dbName);
    }

    @Override    public AbstractDao<Person, Long> getAbstractDao() {        return getDaoSession().getPersonDao();
    }
}1234567891011121314151617

public class StudentDatabaseManager extends DatabaseManager<Student,String> {
    public StudentDatabaseManager(Context context) {        super(context);
    }    public StudentDatabaseManager(Context context, String dbName) {        super(context, dbName);
    }

    @Override    public AbstractDao<Student, String> getAbstractDao() {        return getDaoSession().getStudentDao();
    }
}1234567891011121314

好,写到这里我们就该结束了吗?no,我们还可以继续,come on baby。

以上的PersonDatabaseManager、StudentDatabaseManager是否可以利用工厂模式来创建了?

答案当然是yes!

普通工厂模式:建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

这里写图片描述

这样的话就得出了我们下面的类:

public class DatabaseManagerFactory {    public static DatabaseManager getDataManager(Context context, int type) {        switch (type) {            case 0:                return new PersonDatabaseManager(context);            case 1:                return new StudentDatabaseManager(context);
        }        return null;
    }

}12345678910111213

到此,本次数据库的封装就结束。


转载于:https://my.oschina.net/u/2531415/blog/647070

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值