android个人笔记之greendao初体验

来源:互联网 发布:java版qq 编辑:程序博客网 时间:2024/05/24 01:17

一、.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
@Entitypublic 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
原创粉丝点击