Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 玩轉Android之數據庫框架greenDAO3.0使用指南

玩轉Android之數據庫框架greenDAO3.0使用指南

編輯:關於Android編程

用過ActiveAndroid、玩過ORMLite,穿過千山萬水,最終還是發現greenDAO好用,如果小伙伴們有興趣可以去查看,ActiveAndroid目前存在的問題是沒有更新了,GitHub上ActiveAndroid的更新都是兩年前的事了。所以我們還是來看看這個目前非常活躍的數據庫框架greenDAO,greenDAO在升級到3.0之後使用方式也變得更加簡單了,上手更加容易了。OK,我們今天就來看看吧。

1.引入greenDAO

用過3.0之前的greenDAO的小伙伴們應該都知道在引入greenDAO的時候是非常麻煩,但是在3.0之後這個引入過程簡化了很多,參考官網給出的指導,我們來看看如何引入greenDAO:

首先在project的gradle文件中引入greenDAO插件,引入之後如下:

 

    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

然後在module的gradle文件中添加greenDAO的插件,並引入相關類庫,修改之後如下:

 

 

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'

android {
    ...
    ...

    greendao{
        schemaVersion 1
        targetGenDir 'src/main/java'
    }
}

dependencies {
    ...
    ...

    compile 'org.greenrobot:greendao:3.1.0'
}

小伙伴們注意首先是引入相關插件,然後在dependencies中引入greenDAO的類庫。至於greenDAO中,schemaVersion表示數據庫版本號,每次數據庫升級的時候我們修改這裡的版本號即可(修改這裡的版本號,greenDAO會自動修改生成到DAOMaster中的版本號),targetGenDir表示greenDAO生成的DAOMaster和DaoSession的位置。OK,做完這一切我們就已經成功將greenDAO引入到我們的項目中了。

 

2.數據庫初始化

數據庫引入成功後,在使用之前,我們還得先來創建一個實體類:

 

@Entity
public class User {
    @Id
    private Long id;
    @Property(nameInDb = "USERNAME")
    private String username;
    @Property(nameInDb = "NICKNAME")
    private String nickname;
}

@Entity表示這個實體類一會會在數據庫中生成對應的表,@Id表示該字段是id,小伙伴們注意該字段的數據類型為包裝類型Long,為什麼要用包裝類型呢?我們一會插入數據的時候再說。@Property則表示該屬性將作為表的一個字段,其中nameInDb看名字就知道這個屬性在數據庫中對應的數據名稱。OK,寫完這些之後將項目進行編譯,編譯成功之後系統會幫助我們生成相應的構造方法和get/set方法,並且還會在我們的包下生成DaoMaster和DaoSession。那麼這裡常用的注解除了這幾個之外,還有一個較常用的就是@Transient,該注解表示這個屬性將不會作為數據表中的一個字段。就是這麼簡單。另外還有一些比如@NotNull表示該字段不可以為空,@Unique表示該字段唯一。這裡的注解還是挺多的,小伙伴們有興趣可以自行研究。

 

OK,這一步做完之後,我們就可以進行數據庫的初始化了,如下:

 

DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(getApplicationContext(), "lenve.db", null);
        DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
        DaoSession daoSession = daoMaster.newSession();

首先獲取一個DevOpenHelper對象,這個類有點類似於我們使用的SqliteOpenHelper,我們主要在這個類中對數據庫的版本進行管理。這個我們到後面的數據庫升級一節再說。這樣之後,我們對數據庫基本的初始化操作就完成了,玩過Hibernate的小伙伴都知道,在Hibernate框架中如果我們想要操作實體類要通過DAO來操作,那麼在這裡也一樣。想要操作User實體類,得先有一個UserDao,這個UserDao要怎麼獲取呢?如下:

 

userDao = daoSession.getUserDao();

OK,這些東西都有了,接下來我們就可來操作數據庫了。

 

 

3.添加數據

數據庫的增刪改查我們都將通過UserDao來進行,插入操作如下:

 

User user = new User(null, "zhangsan" + random.nextInt(9999),"張三");
        userDao.insert(user);

User的第一個參數為id,這裡傳null的話在插入的過程中id字段會自動增長(現在知道為什麼id要為Long類型了吧!)第二個參數是username,每次插入時生成一個隨機數,避免重復。

 

4.刪除數據

刪除數據和修改數據的思路一樣,都是要先查找到數據:

 

List userList = (List) userDao.queryBuilder().where(UserDao.Properties.Id.le(10)).build().list();
        for (User user : userList) {
            userDao.delete(user);
        }

where表示查詢條件,這裡我是查詢id小於等於10的數據,where中的參數可以有多個,就是說可以添加多個查詢條件。最後的list表示查詢結果是一個List集合,如果你只想查詢一條數據,最後unique即可。當然,我們也可以根據id來刪除數據:

 

 

User user = userDao.queryBuilder().where(UserDao.Properties.Id.eq(16)).build().unique();
        if (user == null) {
            Toast.makeText(MainActivity.this, "用戶不存在", Toast.LENGTH_SHORT).show();
        }else{
            userDao.deleteByKey(user.getId());
        }

也可以將表中所有數據一次刪除:

 

 

userDao.deleteAll();

 

5.修改數據

修改數據也是先查詢,再修改:

 

User user = userDao.queryBuilder()
                .where(UserDao.Properties.Id.ge(10), UserDao.Properties.Username.like("%90%")).build().unique();
        if (user == null) {
            Toast.makeText(MainActivity.this, "用戶不存在!", Toast.LENGTH_SHORT).show();
        }else{
            user.setUsername("王五");
            userDao.update(user);
        }

這裡我添加了兩個查詢條件,一個是id要大於等於10,同是還要滿足username like %90%,注意最後的unique表示只查詢一條數據出來即可。

 

6.查詢數據

 

List list = userDao.queryBuilder()
                .where(UserDao.Properties.Id.between(2, 13)).limit(5).build().list();
        for (int i = 0; i < list.size(); i++) {
            Log.d("google_lenve", "search: " + list.get(i).toString());
        }

其實上面刪除和修改都已經涉及到查詢了,查詢裡邊有許多非常好用的函數,我這裡舉兩個例子between表示查詢id介於2到13之間的數據,limit表示查詢5條數據。

 

7.數據庫升級

數據庫的升級其實就兩個步驟我們來看看:

7.1 修改gradle文件

首先在module的gradle文件中修改版本號:

 

        //這裡改為最新的版本號
        schemaVersion 2
        targetGenDir 'src/main/java'
    }


 

7.2修改實體類

 

@Entity
public class User {
    @Property
    private int age;
    @Property
    private String password;
    @Id
    private Long id;
    @Property(nameInDb = "USERNAME")
    private String username;
    @Property(nameInDb = "NICKNAME")
    private String nickname;
}

重現編譯項目運行即可。

 

 

一般的數據庫升級這樣就可以了,特殊情況可能需要自己編寫數據庫遷移腳本,這種時候可以自定義DBHelper,定義方式如下,注意繼承類:

 

public class DBHelper extends DaoMaster.OpenHelper {
    public static final String DBNAME = "lenve.db";

    public DBHelper(Context context) {
        super(context, DBNAME, null);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        super.onUpgrade(db, oldVersion, newVersion);
    }
}

可以在onUpgrade方法中進行數據庫的遷移,如果自定義了DBHelper,則數據庫的初始化變為如下方式:

 

 

        DBHelper devOpenHelper = new DBHelper(this);
        DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
        DaoSession daoSession = daoMaster.newSession();
        userDao = daoSession.getUserDao();

OK,這就是greenDAO數據庫框架的一個簡單介紹,更多使用姿勢參見官網。

 

以上。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved