GreenDAO之「04.GreenDao的各種查詢方法」
程式設計師之所以犯錯誤,不是因為他們不懂,而是因為他們自以為什麼都懂(來自csdn首頁)
那麼,這篇文章讓我們一起學習一下greendao的各種查詢方法
首先,我們看一下greendao四種基本查詢方法:
- list()
- listLazy()
- listLazyUncached()
- listIterator()
下面我們分別來看一下:
1.list()
其實,我們的list()方法在前兩篇文章中我們已經使用了它查詢我們新增到資料庫中的方法,這裡就不貼程式碼了
它是將所有實體載入記憶體,以ArrayList形式返回,使用起來也是最簡單的
2.listLazy()
下面我們還是使用前兩篇文章所寫的程式碼來演示一下listLazy()方法是如何使用的
首先我們將addPerson()方法先註釋掉,因為我們的程式碼已經執行過一次,資料也都插入到資料庫當中了
然後我們再新建一個querData()方法
在queryData()方法內部加入以下程式碼:
LazyList<Son> sonList = sonDao.queryBuilder().listLazy(); for (Son son : sonList) { Log.d("MAIN_TAG", "queryAll() called" + son); } sonList.close();
我們可以看到我們呼叫listLazy()方法返回了一個LazyList型別的物件
然後列印查詢結果的方法是與list()方法相同的
其實listLazy()要求實體按需載入到記憶體。當列表中的其中一個元素第一次被訪問,他會被載入並快取備用,這裡我們並沒有體會到,這裡我們先學習一下他是如何使用的
然後我們應該注意到listLazy()方法使用完之後是必須需要使用close()方法關閉的
3.listLazyUncached()
這個方法使用起來是與listLazy()方法無異的,我們只需要將呼叫的listLazy()方法修改為listLazyUncached()方法:
LazyList<Son> sonList = sonDao.queryBuilder().listLazyUncached(); for (Son son : sonList) { Log.d("MAIN_TAG", "queryAll() called" + son); } sonList.close();
其實,listLazyUncached()方法是建立一個虛擬的實體列表,任何訪問列表中的元素都會從資料庫中讀取
當然,它使用完也是需要關閉的
4.listIterator()
listIterator()方法使用起來就與前面介紹的方法不同了:
Iterator<Son> sonList = sonDao.queryBuilder().listIterator();
while (sonList.hasNext()) {
Son son = sonList.next();
Log.d("MAIN_TAG", "queryAll() called" + son);
}
首先,它返回的是一個Iterator物件,所以我們需要使用一個Iterator物件去接收
然後它在輸出資料的時候需要呼叫一個類似遊標的方法
我們使用while迴圈來遍歷sonList中的所有資料,然後列印每一個數據
其實,它是可迭代訪問結果集,按需載入資料,資料不快取
5.檢視sql語句的拼裝
當我們想看一下greendao到底是如何拼裝sql資料的時候
greendao也為我們提供了一種方式
首先,我們在onCreate方法的內部新增兩個常量:
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
然後我們直接執行程式,我們在控制檯搜尋greenDAO標籤下的列印資料,我們就可以看到:
我們可以看到SELECT T.”NAME”,T.”AGE”,T.”_id”,T.”FATHER_ID” FROM “SON” T 這樣一條sql語句
到此,我們greendao幾種查詢方法學習完成了!
但是感到非常抱歉,這篇文章講解的內容比較抽象,個人能力有限,但我會在後期將自己的一些理解更新到這篇文章當中!大家也可以先檢視一下greenDao官方文件中的一些介紹
接下來的文章,我們將一起學習一下GreenDAO的條件查詢,一起期待吧!
彩蛋!!
看到這裡的朋友你有福利了!我的個人微信公眾號上線了!眾多熱門技術文章,眾多有趣好玩的腦洞,請掃描下方二維碼關注!
程式猿乾貨分享,歡迎您的到來!