android个人笔记之greendao初体验

一、.as配置环境

1.项目的gradle文件

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

2.app gradle文件

apply plugin: 'org.greenrobot.greendao'
greendao {
    schemaVersion 1
}
compile 'org.greenrobot:greendao:3.2.0'
compile 'net.zetetic:android-database-sqlcipher:3.5.4'

二、初始化

1.建立实体类,然后build 然后make project
@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private String sex;
    private String age;
}
注意事项:
@Entity 必须要  
@Id  必须要相当于主键,赋值时可以不用管,构造函数传null也行
2.自己写一个 Application,如果数据库不加密的话变量设置成false,且不需要引入
compile 'net.zetetic:android-database-sqlcipher:3.5.4'这个包
public class App extends Application {
    /** A flag to show how easily you can switch from standard SQLite to the encrypted SQLCipher. */
    public static final boolean ENCRYPTED = false;
    private DaoSession daoSession;

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

        MopenHelper helper = new MopenHelper(this, ENCRYPTED ? "notes-db-encrypted" : "notes-db");
        Database db = ENCRYPTED ? helper.getEncryptedWritableDb("super-secret") : helper.getWritableDb();
        daoSession = new DaoMaster(db).newSession();
    }

    public DaoSession getDaoSession() {
        return daoSession;
    }
}
注意事项:MopenHelper是自己定义的继承自,此处数据库升级操作需要。点击make project 会自动生成2个文件
DaoSession.java  
DaoMaster.java 
这2个文件和实体类在一个文件夹下,
在gradle
greendao {
    schemaVersion 1
}
中这里配置路径,如果不配置,默认和实体类一个文件夹,默认隐藏文件,但是如果在自己的appclition
中像点击源码方式查看
还是能进入这2个文件的,如果配置了路径则不会隐藏。

3.使用

在activity中
private UserDao userDao;
oncreate中获取对象
App application = (App) getApplication();
DaoSession daoSession = application.getDaoSession();
userDao = daoSession.getUserDao();
操作:
switch (v.getId()){
    case R.id.btn001://查询
        List<User> users = userDao.loadAll();
        StringBuilder stringBuilder=new StringBuilder();
        if (users.size()>0){
            for(int i=0;i<users.size();i++){
                User user = users.get(i);
                stringBuilder.append(user.getName()+""+user.getSex()+"id:"+user.getId()+"age:"+user.getAge());
            }
            text001.setText(stringBuilder.toString());
        }
        //Toast.makeText(this, BuildConfig.appKey,Toast.LENGTH_SHORT).show();
        break;
    case R.id.btn002://修改
        User userx=new User();
        userx.setId(1L);
        userx.setName("hu");
        userx.setSex("男");
        userDao.update(userx);
        break;
    case R.id.btn003://删除
        //userDao.deleteByKey(1l);
        break;
    case R.id.btn004://增加
        User userz=new User(null,"hu11","女","18");
        userDao.insert(userz);
        break;
    default:break;
}
更多操作自己摸索 不复杂的
 
 

四、关于数据库升级

继承
DaoMaster.DevOpenHelper 
然后重写onUpgrade方法。在里面进行升级操作
例子:此处user 本来只有
  private Long id;
    private String name;
    private String sex;
这个三个字段。如何加入一个新的字段age,且保留原始数据
首先直接把user实体类中自动生成的代码全部删掉,然后添加user字段,然后重新make project。
然后在在自定义的
public class MopenHelper extends DaoMaster.DevOpenHelper {
    public MopenHelper(Context context, String name) {
        super(context, name);
    }

    public MopenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
       if(oldVersion<=1){
           db.execSQL(" ALTER TABLE User ADD COLUMN age");
       }
    }
}
注意事项:onUpgrade里面原来有一句代码,super(xxx,xxx,xx)这个是调用父类的
onUpgrade方法,此处必须删掉,因为父类里面是先删除全部表,再新建全部表,显然不能保存
原始数据库数据,这也是必须自定义MopenHelper的原因。
此处我们执行自己的sql逻辑,原始数据由于没有age字段,在新表里面age就是null。
最后把gradle中的
greendao {
    schemaVersion 1
}
版本号 改成比1大的就行了,然后升级app就会发现原始数据并没有被删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值