Android杂谈(22)GreenDAO的使用

转载请注意:http://blog.csdn.net/wjzj000/article/details/61426570


我和一帮应届生同学维护了一个公众号:IT面试填坑小分队。旨在帮助应届生从学生过度到开发者,并且每周树立学习目标,一同进步!
这里写图片描述

写在前面

很久没有写博客了,没办法。国际局势着实有点跳脱,腐朽的美帝资本主义能的简直要上天了。把不要脸的精神发挥的淋淋尽致,日甚一日,甚嚣尘上。更可气的是,一些不法分子,资本主义自由思想泛滥,忘掉了本性,应该坚决清理出伟大的社会主义阵营!可这和我没写博客有什么关系呢?
没有关系啊!我就是在装逼。

今天记录一下使用GreenDAO的过程,第一次使用关于数据库的框架。不得不说真的好用。有多好用?这么形容,十方无影像,六道绝形踪。跳出三界外,不在五行中。这简直就是一个贼6的框架。


准备阶段

GreenDAO的官方文档:http://greenrobot.org/greendao/documentation/

依赖:

    compile 'org.greenrobot:greendao:3.2.0'

greendao {
    schemaVersion 1  //数据库版本
    daoPackage 'com.aopa.greendao'   //自动生成工具类的目录位置
    targetGenDir 'src/main/java'    
}

PS:我并没有用过2.x的版本,因此那种些main方法的经历的确没有接触过。

我们在使用GreenDAO的时候,我们只需要按套路写一个类,这个类就是对应我们数据库的每一张表。比如:

开始

@Entity
public class CollectQuestion {
    @Id(autoincrement = true)
    private Long id;
    @Property(nameInDb = "USERNAME")
    private int testName;

}

通过@Entity那么这个类便成了数据库中的一张表,而@Id 此表明这是表的主键。当我们build工程之后我们会发现,GreenDAO替我们默认生成了:

这里写图片描述

关于Entity:

//直接Google翻译的官方注释
@Entity(
        // 如果你有多个模式,你可以告诉greenDAO
        // 实体所属的模式(选择任何字符串作为名称).
        schema = "myschema",

        // 使实体“活动”的标志:活动实体具有更新,删除和刷新方法。
        active = true,

        // 指定数据库中的表的名称。 默认情况下,名称基于实体类名称。
        nameInDb = "AWESOME_USERS",

        // 在此处定义跨多个列的索引。
        indexes = {
                @Index(value = "name DESC", unique = true)
        },

        // 标记DAO是否应该创建数据库表(默认值为true)。
        // 如果您有多个实体映射到一个表,或者表的创建是在greenDAO之外创建的,
        // 则将此属性设置为false。
        createInDb = false,

        // 是否应生成所有属性构造函数。
        // 总是需要一个无参数的构造函数。
        generateConstructors = true,

        // 如果缺少,应该生成属性的getter和setter。
        generateGettersSetters = true
)

关于Property:

@Property允许您定义属性映射到的非默认列名称。如果不存在,greenDAO将以SQL-ish方式使用字段名(大写字母,下划线代替驼峰,例如 customName将成为 CUSTOM_NAME)。注意:您当前只能使用内联常量来指定列名称。


表以及字段的默认值:

greenDAO尝试使用合理的默认值,因此开发人员不必配置每一个位。

例如,数据库侧的表和列名称派生自实体和属性名称。而不是在Java中使用的骆驼案例样式,默认数据库名称使用大写,使用下划线分隔单词。

例如,名为creationDate的属性 将成为数据库列 CREATION_DATE。


简单的操作数据库:

创建数据库:


DaoMaster.DevOpenHelper devOpenHelper=new DaoMaster.DevOpenHelper(context,"test.db");
SQLiteDatabase database = devOpenHelper.getWritableDatabase();
DaoSession daoSession = new DaoMaster(database).newSession();
QuestionDao questionDao = daoSession.getQuestionDao();

当我们获取questionDao 对象之后,我们便可以很方便的操作数据库了。

//查找表中所有信息
collectQuestionDao.queryBuilder().list();
//按条件查询
collectQuestionDao.queryBuilder()
                    .where(CollectQuestionDao.Properties.TestName
                    .eq("aaa")).list();
//限制,分页
collectQuestionDao.queryBuilder()
                .limit(5)
                .offset(5)
                .list();


//简单的插入:
collectQuestionDao.insert(collectQuestion);

//通过主键删除:
collectQuestionDao.deleteByKey(1L);

//更新
question.setTestName("bbb");
collectQuestionDao.update(question);

//更多用法,请直接上官网

打开已有的数据库:做法很简单。和我们正常打开内置的数据库没什么两样。

打开assets中的数据库

首先要封装一个返回SQLiteDatabase 对象的类。


public class MySQLiteDatabase {
    String filePath = "data/data/com.aopa/data.db";
    String pathStr = "data/data/com.aopa/databases";

    public  SQLiteDatabase openDatabase(Context context){
        File jhPath=new File(filePath);
        if(jhPath.exists()){
            return SQLiteDatabase.openOrCreateDatabase(jhPath, null);
        }else{
            File path=new File(pathStr);
            if (path.mkdir()){
            }else{
            }
            try {
                InputStream is=context.getClass().getClassLoader().getResourceAsStream("assets/"+"data.db");

                FileOutputStream fos=new FileOutputStream(jhPath);
                byte[] buffer=new byte[10240];
                int count = 0;
                while((count = is.read(buffer))>0){
                    fos.write(buffer,0,count);
                }
                fos.flush();
                fos.close();
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
            return openDatabase(context);
        }
    }
}

然后按套路来创建DaoSession 即可。


MySQLiteDatabase s = new MySQLiteDatabase ();
SQLiteDatabase db = s.openDatabase(App.getInstance().getContext());
DaoSession daoSession = new DaoMaster(db).newSession();

OK,到此我们就可以正常的操作数据库了。


尾声

如果看的直迷糊,你可拉到吧,别看了。民主富强革命火炬的传承,靠的是我们这些祖国的花朵,王者农药挺好玩的,还不快去上分。
更多用法还是直接进官网来的快:http://greenrobot.org/greendao/documentation/

最后希望各位看官可以star我的GitHub,三叩九拜,满地打滚求star:
https://github.com/zhiaixinyang/PersonalCollect
https://github.com/zhiaixinyang/MyFirstApp

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值