android个人笔记之greendao初体验

    xiaoxiao2021-03-26  5

    一、.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个文件和实体类在一个文件夹下,在gradlegreendao { 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就会发现原始数据并没有被删除

    转载请注明原文地址: https://ju.6miu.com/read-500333.html

    最新回复(0)