您的位置:首页 > 移动开发 > Android开发

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

2017-07-08 10:25 495 查看
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(<
4000
span class="hljs-keyword">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,对于刚入门的朋友还是有些难已把原本的数据库数据进行保留的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: