GreenDao数据库简单配置和升级
2017-12-18 10:37
120 查看
项目中用到本地数据库存储数据,数据量以及类型比较多而且繁杂,一个Sp已经显得苍白无力了 - -!于是乎,就用GreenDao来存储了。
先说一下配置情况:
1、工程build.gradle中添加如下:
说明:dependencies节点下添加
2、Moudle下的build.gradle添加如下:
说明:顶部最外层添加:
android节点下添加:
dependencies节点下添加:
最后Aysnc一下就算完成了。
3、创建实体类表,比如:
声明完属性以后,rebuild一下工程,会自动生成上面的那些get、set等方法,对应的dao包路径下也会生成相应的Dao文件。这些都不需要手动添加,全是rebuild工程之后自动生成的,而且不建议修改。你只需要声明属性(也就是表中的字段)就好。
4、创建MyApplication:
里面有这么一句话:“在正式的项目中,还应该做一层封装,来实现数据库的安全升级”。网上的很多Demo是未封装的。如果你的数据库不需要升级的话,可以直接使用,但是如果你的数据库需要升级的话,显然就不可取了。
因为数据库版本升级的话,会默认先删除所有的表,再重新创建,意味着如果用户之前数据库里已经保存了数据,你这样不作处理,直接修改为schemaVersion2然后打包给用户安装的话,会导致用户之前手机数据库里存的数据全部丢失。下面DaoMater里那两行代码也意味着:删除、重建。
所以在升级的时候需要对用户已经保存的数据进行一下处理。
借助于:
工程build.gradle中allprojects节点下的repositories下添加
github上搜一下就行,当然网上也有很多使用教程。
compile完成之后,创建一个MySQLiteOpenHelper,也就是上面MyApplication中用到的。
重写了升级里面的方法,这样就保证了即使数据库添加字段升级了,数据也不会丢失。
上面的PersonDao就是Person这个表新增字段有改动的dao,可以添加多个,比如:
然后就可以使用了,Demo如下:
插入一条数据常用方法:insert或者insertOrReplace,后者也起到了更新的功能,跟update功能一样,只不过在数据库里的顺序会改变,直接update更新的话,顺序不会改变。关于查询和删除的方法就不多说了,网上很多。
先说一下配置情况:
1、工程build.gradle中添加如下:
说明:dependencies节点下添加
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
2、Moudle下的build.gradle添加如下:
说明:顶部最外层添加:
apply plugin: 'org.greenrobot.greendao'
android节点下添加:
greendao { schemaVersion 1//数据库版本号,数据库升级会用到,如果不需要升级,一直为1就好 daoPackage 'com.thtj.demo.dao'//DaoMaster、DaoSession以及各种实体Dao的生成路径 targetGenDir 'src/main/java' }
dependencies节点下添加:
compile 'org.greenrobot:greendao:3.2.2'
最后Aysnc一下就算完成了。
3、创建实体类表,比如:
import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.Unique; import org.greenrobot.greendao.annotation.Generated; @Entity public class Person { @Id private Long id; @Unique private String name; private int age; private String sex; private int salary; @Generated(hash = 72938267) public Person(Long id, String name, int age, String sex, int salary) { this.id = id; this.name = name; this.age = age; this.sex = sex; this.salary = salary; } @Generated(hash = 1024547259) public Person() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } public String getSex() { return this.sex; } public void setSex(String sex) { this.sex = sex; } public int getSalary() { return this.salary; } public void setSalary(int salary) { this.salary = salary; } }
声明完属性以后,rebuild一下工程,会自动生成上面的那些get、set等方法,对应的dao包路径下也会生成相应的Dao文件。这些都不需要手动添加,全是rebuild工程之后自动生成的,而且不建议修改。你只需要声明属性(也就是表中的字段)就好。
4、创建MyApplication:
public class MyApplication extends Application { private MySQLiteOpenHelper mHelper; public static MyApplication instance; @Override public void onCreate() { super.onCreate(); instance = this; setDatabase(); } public static MyApplication getInstances() { return instance; } private void setDatabase() { // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 // 在正式的项目中,还应该做一层封装,来实现数据库的安全升级。 mHelper = new MySQLiteOpenHelper(this, "notes-db", null); } public DaoSession getDaoSession() { return new DaoMaster(mHelper.getWritableDatabase()).newSession(); } }
里面有这么一句话:“在正式的项目中,还应该做一层封装,来实现数据库的安全升级”。网上的很多Demo是未封装的。如果你的数据库不需要升级的话,可以直接使用,但是如果你的数据库需要升级的话,显然就不可取了。
因为数据库版本升级的话,会默认先删除所有的表,再重新创建,意味着如果用户之前数据库里已经保存了数据,你这样不作处理,直接修改为schemaVersion2然后打包给用户安装的话,会导致用户之前手机数据库里存的数据全部丢失。下面DaoMater里那两行代码也意味着:删除、重建。
所以在升级的时候需要对用户已经保存的数据进行一下处理。
借助于:
compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v2.0.1'
工程build.gradle中allprojects节点下的repositories下添加
maven { url "https://jitpack.io" }
github上搜一下就行,当然网上也有很多使用教程。
compile完成之后,创建一个MySQLiteOpenHelper,也就是上面MyApplication中用到的。
public class MySQLiteOpenHelper extends DaoMaster.OpenHelper { public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) { super(context, name, factory); } @Override public void onUpgrade(Database db, int oldVersion, int newVersion) { MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() { @Override public void onCreateAllTables(Database db, boolean ifNotExists) { DaoMaster.createAllTables(db, ifNotExists); } @Override public void onDropAllTables(Database db, boolean ifExists) { DaoMaster.dropAllTables(db, ifExists); } }, PersonDao.class); } }
重写了升级里面的方法,这样就保证了即使数据库添加字段升级了,数据也不会丢失。
上面的PersonDao就是Person这个表新增字段有改动的dao,可以添加多个,比如:
PersonDao.class,MoneyDao.class...
然后就可以使用了,Demo如下:
public class MainActivity extends Activity { private TextView tv; private String s = ""; private PersonDao dao = MyApplication.getInstances().getDaoSession().getPersonDao(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = findViewById(R.id.tv); List<Person> personList = dao.loadAll(); if (personList.size() == 0) { for (int i = 0; i < 2; i++) { Person p = new Person(); p.setName("挨踢" + i); p.setAge(i); p.setSex("男"); dao.insertOrReplace(p); } queryData(); } else { queryData(); } tv.setText(s.substring(0, s.length() - 1)); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Person p = dao.queryBuilder() .where(PersonDao.Properties.Name.eq("挨踢0")).unique(); if (p != null) { p.setSex("女"); dao.insertOrReplace(p); // dao.update(p);//也可以这样,检测到存在都会更新 } queryData(); tv.setText(s.substring(0, s.length() - 1)); } }); } public void queryData(){ s = ""; List<Person> pl = dao.loadAll(); if (pl != null && pl.size() > 0) { for (Person p : pl) { s += new GsonBuilder().serializeNulls().create().toJson(p) + ","; } } } }
插入一条数据常用方法:insert或者insertOrReplace,后者也起到了更新的功能,跟update功能一样,只不过在数据库里的顺序会改变,直接update更新的话,顺序不会改变。关于查询和删除的方法就不多说了,网上很多。
相关文章推荐
- GreenDao3.0+的配置使用以及数据库升级
- GreenDao 数据库简单使用及数据库升级更新
- greenDAO3 入门(配置,基本操作,数据库升级)
- druid连接池与数据库简单配置
- greendao3.0的使用, 以及数据库升级(保留原有数据), 和对应的sqlite写的方式
- GreenDao3.2.2集成使用以及数据库的升级
- Windows Mobile6.5开发(二)--配置环境,数据库访问,部署简单实例
- 使用postgreSQL DataSync 进行pg数据库升级 数据同步 升级脚本生成, postgreSQL DataSync简单教程
- greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级
- Django+mysql配置与简单操作数据库实例代码
- 安装Gogs及简单配置(使用默认数据库)
- GreenDao3.0简单使用和升级
- Linux环境下proc的配置c/c++操作数据库简单示例
- ASP.NET通过配置Web.config文件提高手动绑定数据库效率的一个简单方法,不用每次手动连接数据库地址,或者数据库地址变更时只改一处即可。
- 使用postgreSQL DataSync 进行pg数据库升级 数据同步 升级脚本生成, postgreSQL DataSync简单教程
- 【demo记录】GreenDao3的配置和简单使用
- 通过VS中的数据源选择对话框简单实现数据库连接配置
- SNF开发平台-SNF.CodeGenerator-升级生成BS页面代码-支持视图-数据库配置-快速开发者的利器
- GreenDao3.0数据库升级
- 使用postgreSQL DataSync 进行pg数据库升级 数据同步 升级脚本生成, postgreSQL DataSync简单教程