本篇文章不是介紹GreenDao的配置和基礎使用,僅僅記錄一下GreenDao緩存的問題,下面是示例:
## 場景重現
~~~
//第一次查詢
List chats = daoSession.getChatSessionDao()
.queryBuilder()
.orderDesc(ChatSessionDao.Properties.Updatetime)
.list();
//對數據庫中的一條數據進行更新:
ChatSession cs = chats.get(0);
Log.d("body",cs.getBody());
cs.setBody(cs.getBody() + "new");
daoSession.getChatSessionDao().update(cs);
//第二次查詢
List chats = daoSession.getChatSessionDao()
.queryBuilder()
.orderDesc(ChatSessionDao.Properties.Updatetime)
.list();
Log.d("body",chats.get(0).getBody());
~~~
結果發現兩次的`body`的值是一樣的,使用工具查看Sqlite數據庫,發現`body`的值已經變化了,也就是說,我們第二次查詢并沒有真正執行,返回的是第一次查詢的結果。如果要解決緩存問題,這里就要用到`DaoSession`的一個方法:
~~~
DaoSession.clear();
~~~
在示例代碼中應該寫在第二次查詢前面
~~~
daoSession.clear();
//第二次查詢
......
~~~
PS:這個清理緩存的方法,會清除所有表的緩存,目前沒有發現可以清除單個表或者某個查詢的緩存的方法。
## GreenDao配置與使用
GreenDao詳細的配置和Demo可以參考:
1. [ORM 框架之 greenDAO 使用心得](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0727/3223.html)
1. [GreenDao](http://wiki.xby1993.net/doku.php?id=greendao)