Android数据存储之SQlite(下)

作者: pokerfaceCmy | 来源:发表于2017-07-05 11:17 被阅读97次

    上一篇文章简单的介绍了一下 Android中如何操作数据库,但是在实际使用过程中,我觉得非常的不方便。

    不管是Java也好、Android也好,我们都是面向对象编程。然而直接使用Sqlite,手写sql语句,首先是不方便,容易出错;然后也没能体现出Java面向对象的思想;最后要实现数据库的增删改查还需要手动操作Cursor,手动打开/关闭数据库,非常的繁琐。

    那么有没有什么更好的方法可以让我们把精力跟多的放在业务逻辑代码上,而不是来一条一条的编写sql语句呢?下面,我们来了解一下android数据库框架greenDao。

    greenDao是一个ORM框架(Object Relation Mapping 即 对象关系映射),简单来说,就是可以直接将Java中的对象(实体类)印射到数据库的框架。greenDao有很多有点,比如:存取速度快,支持数据库加密,代码库体积小,支持缓存,支持RxJava等等。

    我们先简单的说一下greenDao的配置及使用:

    • 配置GreenDao
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
         classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'//greenDao生产代码插件
        }
        //使用greendao
    apply plugin: 'org.greenrobot.greendao'
    dependencies {
          //greendao依赖
          compile 'org.greenrobot:greendao:3.2.0'
    
        //greendao配置
        greendao {
            //版本号,升级时可配置
            schemaVersion 1
            daoPackage 'cmy.android_jk_new.greendao'
        //目录
            targetGenDir 'src/main/java'
        }```
    
    * 配置完成后就可以开始使用greenDao来操作数据库了,来看看实际操作
    
    首先,正常的写一个网点信息的实体类:
    

    public class BankInfo {
    private Long bankId;//网点ID
    private String bankName;//网点名称
    private String lineId;//线路信息
    private String bankTaskStatus;//网点任务状态

    public Long getBankId() {
        return bankId;
    }
    
    public void setBankId(Long bankId) {
        this.bankId = bankId;
    }
    
    public String getBankName() {
        return bankName;
    }
    
    public void setBankName(String bankName) {
        this.bankName = bankName;
    }
    
    public String getLineId() {
        return lineId;
    }
    
    public void setLineId(String lineId) {
        this.lineId = lineId;
    }
    
    public String getBankTaskStatus() {
        return bankTaskStatus;
    }
    
    public void setBankTaskStatus(String bankTaskStatus) {
        this.bankTaskStatus = bankTaskStatus;
    }
    
    * 接下来利用greenDao来添加注解,将实体类生成对应的数据表,用来保存网点信息数据。
    

    @Entity
    public class BankInfo {
    @Id@Unique
    private Long bankId;//网点ID
    @NotNull
    private String bankName;//网点名称
    private String lineId;//线路信息
    private String bankTaskStatus;//网点任务状态

    @Generated(hash = 2036481339)
    public BankInfo(Long bankId, @NotNull String bankName, String lineId,
            String bankTaskStatus) {
        this.bankId = bankId;
        this.bankName = bankName;
        this.lineId = lineId;
        this.bankTaskStatus = bankTaskStatus;
    }
    
    @Generated(hash = 1911969190)
    public BankInfo() {
    }
    
    public Long getBankId() {
        return bankId;
    }
    
    public void setBankId(Long bankId) {
        this.bankId = bankId;
    }
    
    public String getBankName() {
        return bankName;
    }
    
    public void setBankName(String bankName) {
        this.bankName = bankName;
    }
    
    public String getLineId() {
        return lineId;
    }
    
    public void setLineId(String lineId) {
        this.lineId = lineId;
    }
    
    public String getBankTaskStatus() {
        return bankTaskStatus;
    }
    
    public void setBankTaskStatus(String bankTaskStatus) {
        this.bankTaskStatus = bankTaskStatus;
    }
    

    }

    greenDao会自动在目录下生成“DaoMaster”和“DaoSession”类,我们不需要进行修改。接下来只需要在Activity里做增删查改的操作就行。
    
    greenDao的增,删 ,改操作比较简单分别调用insert(),delete(),update()方法即可,save()方法比较特殊既能执行插入操作也能执行修改操作,具体Api在这里
    [greenDaoAPI](http://greenrobot.org/files/greendao/javadoc/3.1/)
    
    * 送上增删查改的代码:
    

    /**
    * 数据库相关
    */
    private void setupDatabase() {
    //创建数据库
    DaoMaster.DevOpenHelper helper =
    new DaoMaster.DevOpenHelper(this, DatabaseConstant.DATABASE_NAME, null);
    //获取可写数据库
    SQLiteDatabase db = helper.getWritableDatabase();
    //获取数据库对象
    DaoMaster dm = new DaoMaster(db);
    //获取Dao对象的管理者
    daoSession = dm.newSession();

        BankInfo bankInfo = new BankInfo();
    
        bankInfo.setBankId(1L);
        bankInfo.setBankName("招商银行华侨城支行");
        bankInfo.setBankTaskStatus("未完成");
        bankInfo.setLineId("A线路");
        //存入数据库
        daoSession.insert(bankInfo);
        //查询数据
        QueryBuilder qb = daoSession.queryBuilder(BankInfo.class);
        qb.list();
        Logger.d(qb.list());
        for (int i = 0; i < qb.list().size(); i++) {
            BankInfo bl = (BankInfo) qb.list().get(i);
            Logger.d(bl.getBankName());
        }
        //修改数据
        bankInfo.setBankName("华夏银行华侨城支行");
        daoSession.update(bankInfo);
    
        //删除数据
        daoSession.delete(BankInfo.class);
    }
    
    
    这样就完成了数据库的大部分操作,而且全程没有写过sql语句,简直太幸福了!!!
    
    

    相关文章

      网友评论

        本文标题:Android数据存储之SQlite(下)

        本文链接:https://www.haomeiwen.com/subject/ezofhxtx.html