【Android】GreenDao增刪改查(三)

(1)插入

  • 常用API
//這是最簡單的插入語句,新增一行數(shù)據(jù)哪痰,返回值為行號
 public long insert(T entity)
 
 //傳遞一個(gè)數(shù)組,新增多行數(shù)據(jù)
 public void insertInTx(T... entities)
 
 //傳遞一個(gè)集合,新增多行數(shù)據(jù)
public void insertInTx(Iterable<T> entities)

//傳遞一個(gè)集合,新增多行數(shù)據(jù)典徊,setPrimaryKey:是否設(shè)置主鍵
public void insertInTx(Iterable<T> entities, boolean setPrimaryKey)

//將給定的實(shí)體插入數(shù)據(jù)庫藏研,若此實(shí)體類存在,則覆蓋
public long insertOrReplace(T entity)

//使用事務(wù)操作嚼黔,將給定的實(shí)體插入數(shù)據(jù)庫,若此實(shí)體類存在惜辑,則覆蓋
public void insertOrReplaceInTx(T... entities)

//使用事務(wù)操作唬涧,將給定的實(shí)體插入數(shù)據(jù)庫,若此實(shí)體類存在盛撑,則覆蓋
public void insertOrReplaceInTx(Iterable<T> entities)

//使用事務(wù)操作碎节,將給定的實(shí)體插入數(shù)據(jù)庫,若此實(shí)體類存在抵卫,則覆蓋狮荔,并設(shè)置是否設(shè)定主鍵
public void insertOrReplaceInTx(Iterable<T> entities, boolean setPrimaryKey)
  • 插入
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "demo.db", null);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        DaoSession daoSession = daoMaster.newSession();
        StudentDao studentDao = daoSession.getStudentDao();

        for (int i = 0; i < 10; i++) {
            Student student = new Student();
            student.setMId(i+"");
            student.setHobby("籃球");
            student.setMAge(i);
            student.setClassName("一年級");
            long id = studentDao.insertOrReplace(student);
            Log.e(TAG, "onCreate: "+id );
        }
image.png
image.png

<a name="g8Bsn"></a>

(2)查詢

  • Dao查詢常用方法
//根據(jù)主鍵來查詢一條數(shù)據(jù)
public T load(K key)

//根據(jù)行號來查詢一條數(shù)據(jù),行號從1開始
public T loadByRowId(long rowId) 

//查詢表中所有的數(shù)據(jù)
public List<T> loadAll()
  • Dao查詢
        Student load = studentDao.load("1");
        Log.e(TAG, "onCreate: "+load.toString() );
  • QueryBuilder查詢常用方法
// 條件介粘,AND 連接
public QueryBuilder<T> where(WhereCondition cond, WhereCondition... condMore)

// 條件殖氏,OR 連接
public QueryBuilder<T> whereOr(WhereCondition cond1, WhereCondition cond2, WhereCondition... condMore)

//去重
public QueryBuilder<T> distinct()

//分頁
public QueryBuilder<T> limit(int limit)

//偏移結(jié)果起始位,配合limit(int)使用
public QueryBuilder<T> offset(int offset)

//排序姻采,升序
public QueryBuilder<T> orderAsc(Property... properties)

//排序雅采,降序
public QueryBuilder<T> orderDesc(Property... properties)

// 排序,自定義
public QueryBuilder<T> orderCustom(Property property, String customOrderForProperty)

// 排序慨亲,SQL 語句
public QueryBuilder<T> orderRaw(String rawOrder)

//本地化字符串排序婚瓜,用于加密數(shù)據(jù)庫無效
public QueryBuilder<T> preferLocalizedStringOrder()

//自定義字符串排序,默認(rèn)不區(qū)分大小寫
public QueryBuilder<T> stringOrderCollation(String stringOrderCollation)
  • 返回結(jié)果的方法
//值返回一條結(jié)果巡雨,如果返回結(jié)果的數(shù)量>1闰渔,則報(bào)錯(cuò)。如果返回結(jié)果的數(shù)量等于0铐望,那么返回null冈涧。
public T unique()

//值返回一條結(jié)果,如果返回結(jié)果的數(shù)量>1或=0正蛙,則報(bào)錯(cuò)督弓。
public T uniqueOrThrow()

//返回一個(gè)集合
public List<T> list()

//讓我們通過按需加載數(shù)據(jù)(懶惰)來迭代結(jié)果。數(shù)據(jù)未緩存乒验。必須關(guān)閉
public CloseableListIterator<T> listIterator()

//實(shí)體按需加載到內(nèi)存中愚隧。首次訪問列表中的元素后,將加載并緩存該元素以供將來使用锻全。必須關(guān)閉狂塘。
public LazyList<T> listLazy()

//實(shí)體的“虛擬”列表:對列表元素的任何訪問都會導(dǎo)致從數(shù)據(jù)庫加載其數(shù)據(jù)录煤。必須關(guān)閉。
public LazyList<T> listLazyUncached()
  • 判斷條件
//等于
eq()

//不等于
notEq() 

//值等于
like()

//取中間范圍
between()

//in命令
in()

//not in 命令
notIn()

//大于
gt()

//小于
lt()

//大于等于
ge()

//小于等于
le()

//為空
isNull()

//不為空
isNotNull()
  • 查詢所有
        // 查詢所有
        List<Student> list = studentDao.queryBuilder().list();
        Log.e(TAG, "onCreate: "+list.size());
  • And查詢
        // And條件查詢
        List<Student> list = studentDao.queryBuilder()
                .where(StudentDao.Properties.MId.eq(2))
                .where(StudentDao.Properties.ClassName.eq("一年級"))
                .list();
        Log.e(TAG, "onCreate: "+list.size());
  • Or查詢
        // Or條件查詢
        List<Student> list = studentDao.queryBuilder()
                .whereOr(StudentDao.Properties.ClassName.eq("一年級"),
                        StudentDao.Properties.MId.eq(2))
                .list();
        Log.e(TAG, "onCreate: "+list.size());
  • 偏移查詢
        // 查詢10條數(shù)據(jù)荞胡、偏移5條數(shù)據(jù)
        List<Student> list = studentDao.queryBuilder()
                .offset(5)
                .limit(10)
                .list();
        Log.e(TAG, "onCreate: "+list.size());
  • 模糊查詢
        // 模糊查詢(%級% 代表“級”前面和后面可能存在字符妈踊,也可以不存在)
        // 一% 表示以一開頭的字符串
        List<Student> list = studentDao.queryBuilder()
                .where(StudentDao.Properties.ClassName.like("%級%"))
                .list();
        Log.e(TAG, "onCreate: "+list.size());
  • 排序
        // 返回按照年齡倒序排序
        List<Student> list = studentDao.queryBuilder()
                .orderDesc(StudentDao.Properties.MAge)
                .list();
        Log.e(TAG, "onCreate: "+list.size());
  • in
        // in操作符
        List<Student> list = studentDao.queryBuilder()
                .where(StudentDao.Properties.MId.in(1,2,3))
                .list();
        Log.e(TAG, "onCreate: "+list.size());
  • sql語句查詢
        // sql語句查詢
        List<Student> list = studentDao.queryBuilder()
                .where(new WhereCondition.StringCondition(StudentDao.Properties.ClassName.columnName+"=?","一年級"))
                .list();
        Log.e(TAG, "onCreate: "+list.size());

<a name="67ZbY"></a>

(3)更新

  • 常用API
public void update(T entity)
public void updateInTx(T... entities)
public void updateInTx(Iterable<T> entities)
  • 更新會導(dǎo)致其他字段置為空
        Student student = new Student();
        student.setMId("1");
        student.setClassName("高一");
        studentDao.update(student);
  • 查詢后再更新,就不會導(dǎo)致其他字段清空
        // 先查詢后更新
        Student load = studentDao.load("0");
        load.setHobby("足球");
        studentDao.update(load);

(4)保存

  • save
public void save(T entity)
public void saveInTx(T... entities)
public void saveInTx(Iterable<T> entities)
  • 傳入一個(gè)實(shí)體entity泪漂,如果entity的主鍵在表中已存在廊营,則更新已有數(shù)據(jù),反之萝勤,則插入新數(shù)據(jù)
public void save(T entity) {
    if (hasKey(entity)) {
        update(entity);
    } else {
        insert(entity);
    }
}

<a name="wxGaC"></a>

(5)刪除

  • 常用方法
//根據(jù)實(shí)體露筒,刪除一條數(shù)據(jù)(默認(rèn)根據(jù)主鍵刪除數(shù)據(jù))
public void delete(T entity)

//刪除所有數(shù)據(jù)
public void deleteAll()

//根據(jù)key刪除數(shù)據(jù)
public void deleteByKey(K key)

//刪除多條數(shù)據(jù)
public void deleteInTx(T... entities)

//根據(jù)主鍵數(shù)組,刪除多條數(shù)據(jù)
public void deleteByKeyInTx(K... keys)

//根據(jù)集合敌卓,刪除多條數(shù)據(jù)
public void deleteByKeyInTx(Iterable<K> keys)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慎式,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子假哎,更是在濱河造成了極大的恐慌瞬捕,老刑警劉巖鞍历,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舵抹,死亡現(xiàn)場離奇詭異,居然都是意外死亡劣砍,警方通過查閱死者的電腦和手機(jī)惧蛹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刑枝,“玉大人香嗓,你說我怎么就攤上這事∽俺” “怎么了靠娱?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掠兄。 經(jīng)常有香客問我像云,道長,這世上最難降的妖魔是什么蚂夕? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任迅诬,我火速辦了婚禮,結(jié)果婚禮上婿牍,老公的妹妹穿的比我還像新娘侈贷。我一直安慰自己,他們只是感情好等脂,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布俏蛮。 她就那樣靜靜地躺著撑蚌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搏屑。 梳的紋絲不亂的頭發(fā)上锨并,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音睬棚,去河邊找鬼第煮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抑党,可吹牛的內(nèi)容都是我干的包警。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼底靠,長吁一口氣:“原來是場噩夢啊……” “哼害晦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暑中,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤壹瘟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鳄逾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稻轨,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年雕凹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了殴俱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枚抵,死狀恐怖线欲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汽摹,我是刑警寧澤李丰,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站逼泣,受9級特大地震影響趴泌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜圾旨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一踱讨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砍的,春花似錦痹筛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谣旁。三九已至,卻和暖如春滋早,著一層夾襖步出監(jiān)牢的瞬間榄审,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工杆麸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搁进,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓昔头,卻偏偏與公主長得像饼问,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子揭斧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345