Android十八章:是時候在你項目用上greenDAO3

GreenDao

GreenDao3.1.0使用案例包含(增刪查改,升級數(shù)據(jù)庫),3.+版本比2.+更加便捷生成DaoMaster和DaoSession
本文項目地址

首先讓你的android studio配置Greendao數(shù)據(jù)庫

在build.gradle目錄下

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

}

在app/build.gradle目錄下設置

apply plugin: 'org.greenrobot.greendao'
android {
   greendao{
        schemaVersion 1                    //數(shù)據(jù)庫 版本號
        targetGenDir 'src/main/java'    //生成DaoMaster類文件夾
        daoPackage   'com.ppjun.greendaotest.db'  //生成DaoMaster類包名
    }

}
dependencies {
    compile 'org.greenrobot:greendao:3.1.0'
}

新建一個User類

@Entity
public class User {
    @Id
    private Long id;
    @Property(nameInDb = "username")
    private String userName;
    @Property(nameInDb = "password")
    private String passWord;
  
  
  //generate set和get方法 toString方法
  ...
}
  1. @Entity 代表數(shù)據(jù)庫里面的USER表
  2. @Id 主鍵
  3. @Property 表里面的內容
  4. @Unique 唯一的
  5. @Transient 不會被數(shù)據(jù)庫持久化寫進數(shù)據(jù)庫
  6. @NotNull 不為空

到此為止帐偎,sync gradle來執(zhí)行greendao配置,下面開始講解怎么使用

GreenDao使用

如果遇到在生產(chǎn)包下找不到DaoMaster等文件私股,配置完上述代碼要先Run一下刷允。才開始下面代碼冤留。

public static final String DB_NAME = "ppjun.db";//數(shù)據(jù)庫名稱
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);//實例化一個DevOpenhelper,相當于sqlit的SQliteOpenHelper
DaoMaster daoMaster = new DaoMaster(helper.getWritableDb());//實例化DaoMaster
DaoSession daoSession = daoMaster.newSession();//實例化DaoSession
UserDao userDao =daoSession.getUserDao(); //獲取UserDao實例來對表user進行操作


//add,這里的null 代表自增長的id树灶,你還可以為user表插入unique的userid
        User user1 = new User(null, "ag1", "123456");
        User user2 = new User(null, "ag2", "123456");
        User user3 = new User(null, "ag3", "123456");
        userDao.insert(user1);
        userDao.insert(user2);
        userDao.insert(user3);

 //update纤怒,這里更新id是3的user的名字,id從1開始的天通,在where來添加匹配條件
        User user4 = userDao.queryBuilder().where(UserDao.Properties.Id.eq(3)).build().unique();
        user4.setUserName("kk");
        userDao.update(user4);

//delete泊窘,這里刪除id是2的user
        List<User> userList2 = userDao.queryBuilder().where(UserDao.Properties.Id.eq(2)).build().list();
        for (User user5 : userList2)
            userDao.delete(user5);

  //query,重新user表全部user
        List<User> userList = userDao.queryBuilder().build().list();
        for (User user : userList)
            Log.i(TAG, user.toString());

上面完成數(shù)據(jù)庫基本操作像寒。

下面來說GreenDao的升級數(shù)據(jù)庫烘豹,在user表插入age

1、修改build.gradle下面的schemaVersion 2

2诺祸、在user類携悯,新增age對象

public class User {
    @Id
    private Long id;
    @Property(nameInDb = "age")
    private int age;
  //generate getter and setter & toString
}

3、你要新建一個類MyDBHelper繼承DaoMaster.OpenHelper,在類的構造函數(shù)傳入Context筷笨,super(context,DB_NAME,null);還要重寫onUpgrade方法(注意這里的參數(shù)一是Database)憔鬼,然后創(chuàng)建表(傳入true龟劲,這里使用IF NOT EXISTS)不用擔心表不存在,還有執(zhí)行增加age列sql語句 db.exeSQL("ALTER TABLE USER ADD COLUMN age");

public class MyDBHelper extends DaoMaster.OpenHelper {
    public MyDBHelper(Context context) {
        super(context, DB_NAME,null);
    }

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        super.onUpgrade(db, oldVersion, newVersion);
        NoteDao.createTable(db,true);
        db.execSQL("ALTER TABLE NOTE ADD COLUMN age");
    }


}

這時候的DaoMaster.DevOpenHelper改為自定義DBHelper逊彭,這樣子升級數(shù)據(jù)庫就不會丟失原來的數(shù)據(jù)了

DBHelper dbHelper = new DBHelper(context);
DaoMaster daoMaster = new DaoMaster(dbHelper.getWritableDb());

本文項目地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末咸灿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侮叮,更是在濱河造成了極大的恐慌避矢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囊榜,死亡現(xiàn)場離奇詭異审胸,居然都是意外死亡,警方通過查閱死者的電腦和手機卸勺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門砂沛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曙求,你說我怎么就攤上這事碍庵。” “怎么了悟狱?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵静浴,是天一觀的道長。 經(jīng)常有香客問我挤渐,道長苹享,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任浴麻,我火速辦了婚禮得问,結果婚禮上,老公的妹妹穿的比我還像新娘软免。我一直安慰自己宫纬,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布膏萧。 她就那樣靜靜地躺著哪怔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪向抢。 梳的紋絲不亂的頭發(fā)上认境,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音挟鸠,去河邊找鬼叉信。 笑死,一個胖子當著我的面吹牛艘希,可吹牛的內容都是我干的硼身。 我是一名探鬼主播硅急,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼佳遂!你這毒婦竟也來了营袜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤丑罪,失蹤者是張志新(化名)和其女友劉穎荚板,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吩屹,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡跪另,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了煤搜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片免绿。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖擦盾,靈堂內的尸體忽然破棺而出嘲驾,到底是詐尸還是另有隱情,我是刑警寧澤迹卢,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布辽故,位于F島的核電站,受9級特大地震影響婶希,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蓬衡,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一喻杈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狰晚,春花似錦筒饰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秒咐,卻和暖如春谬晕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背携取。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工攒钳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雷滋。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓不撑,卻偏偏與公主長得像文兢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子焕檬,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容

  • 一姆坚、關于greenDAO greenDAO應該算是當前最火的數(shù)據(jù)庫開源框架了,它是一個將對象映射到SQLite數(shù)據(jù)...
    當幸福來敲門58閱讀 13,862評論 3 19
  • GreenDao 介紹:greenDAO是一個對象關系映射(ORM)的框架实愚,能夠提供一個接口通過操作對象的方式去操...
    小董666閱讀 730評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,777評論 25 707
  • 1. 什么是greenDao 弄明白greenDao之前我們應該先了解什么是ORM(Object Relation...
    看一季殘花落幕閱讀 2,482評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理兼呵,服務發(fā)現(xiàn),斷路器爆侣,智...
    卡卡羅2017閱讀 134,633評論 18 139