Android数据库GreenDao2.1使用和缺陷

1.依赖:

这里写图片描述

 compile 'de.greenrobot:greendao:2.1.0'
 compile 'de.greenrobot:greendao-generator:2.1.0'

2.创建自定义的DAOGenerater,指定数据库相关配置并生成相关类

这里写图片描述

public class CustomDAOGenerater {

    public static void main(String[] args) throws Exception {

        //创建模型对象  参数1:数据库的版本号,参数2:生成的文件所放的位置,工程包名+要放入的包名
        Schema schema = new Schema(1, "com.example.sunshine.greendao.Dao");
        // 创建表,参数为表名
        Entity userInfo = schema.addEntity("UserInfo");
        // 为表添加字段,这里没有自动增长
        userInfo.addIdProperty();
        userInfo.addStringProperty("name");// String类型字段
        userInfo.addIntProperty("age");//Int类型字段
        userInfo.addStringProperty("tel");// String类型字段

        // 生成数据库相关类
        //第二个参数指定生成文件的本次存储路径,  他会自动拼接,这个路径不用修改
        try {
            new DaoGenerator().generateAll(schema, "./app/src/main/java");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

3. 在Application中通过DaoMaster.DevOpenHelper初始化数据库

这里写图片描述

   public  UserInfoDao userInfoDao;

    @Override
    public void onCreate() {
        super.onCreate();


        //设置数据库的名称
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "user.db", null);
        // 获取实例对象
        SQLiteDatabase database = helper.getWritableDatabase();
        // 获取DaoMaster对象
        DaoMaster daoMaster = new DaoMaster(database);
        // 获取Session对象
        DaoSession daoSession = daoMaster.newSession();
        //清空一下内存缓存session会给entities带来缓存,导致删除失败bug
        //例如,数据库存储的是用户登录信息,
        // 当用户退出登录时,页面关闭,上个页面会立马查询数据库,会因为缓存,导致数据库删除失败
        daoSession.clear();

        userInfoDao = daoSession.getUserInfoDao();

4.在配置清单文件中配置一下自定义的Application

  android:name=".App"

5.在BaseActivity BaseFragment类中获取全局的Dao

       //获取全局的daoSession然后通过daoSession获取mdataDao
        App application = (App) getApplication();
        userInfoDao = application.userInfoDao;

6.增,删,改,查

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.inster://插入数据
                UserInfo info = new UserInfo();
                info.setAge(18);
                info.setName("张三");
                info.setId(1L);
                info.setTel("15517108393");
                userInfoDao.insert(info);

                break;
            case R.id.updata:
         //更新的还是第一条数据,他会覆盖原来的数据
         //或者不查询直接创建一个新的对象,只要主键重复,他就会覆盖原来的这条数据
                load = userInfoDao.load((long) 1);
                load.setName("李四");
                userInfoDao.update(load);

                break;
            case R.id.query:
                //查询第一条数据
                load = userInfoDao.load((long) 1);
                Log.e("eeee",load.getName());
                break;
            case R.id.delect:
                // 删--通过key删除
                userInfoDao.deleteByKey(1L);

                //删除所有
//                userInfoDao.deleteAll();//删除数据库中所有数据

                break;
        }
    }

7.数据库的更新:
http://www.open-open.com/lib/view/open1452143252855.html

//1.1.在根目录的build.gradle文件的repositories内添加如下代码:
    allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }
2.添加依赖
 dependencies {
            compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v0.0.5'
    }
3. 在DaoMaster类的onUpgrade方法添加如下代码即可,参数为所有的Dao类   ,注释掉原来这个方法中的两行代码

参数为所有生成的Dao类
MigrationHelper.getInstance().migrate(db,TestDataDao.class,TestData2Dao.class,TestData3Dao.class);

Green的缺陷:
1.因为需要获取Dao类,但是如果再Adapter的Holder中去联网请求,那么数据库查询就不是太方便

2.因为默认数据库升级,每次都会删除所有的表,再重新建立表,所以,在于以前的App不是用的GreenDao,后期修改成GreenDao,对于刚入门的朋友还是有些难已把原本的数据库数据进行保留的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值