Android雜談(22)GreenDAO的使用
我和一幫應屆生同學維護了一個公眾號:IT面試填坑小分隊。旨在幫助應屆生從學生過度到開發者,並且每週樹立學習目標,一同進步!
寫在前面
很久沒有寫部落格了,沒辦法。國際局勢著實有點跳脫,腐朽的美帝資本主義能的簡直要上天了。把不要臉的精神發揮的淋淋盡致,日甚一日,甚囂塵上。更可氣的是,一些不法分子,資本主義自由思想氾濫,忘掉了本性,應該堅決清理出偉大的社會主義陣營!可這和我沒寫部落格有什麼關係呢?
沒有關係啊!我就是在裝逼。
今天記錄一下使用GreenDAO的過程,第一次使用關於資料庫的框架。不得不說真的好用。有多好用?這麼形容,十方無影像,六道絕形蹤。跳出三界外,不在五行中。這簡直就是一個賊6的框架。
準備階段
依賴:
compile 'org.greenrobot:greendao:3.2.0'
greendao {
schemaVersion 1 //資料庫版本
daoPackage 'com.aopa.greendao' //自動生成工具類的目錄位置
targetGenDir 'src/main/java'
}
PS:我並沒有用過2.x的版本,因此那種些main方法的經歷的確沒有接觸過。
我們在使用GreenDAO的時候,我們只需要按套路寫一個類,這個類就是對應我們資料庫的每一張表。比如:
開始
@Entity
public class CollectQuestion {
@Id(autoincrement = true)
private Long id;
@Property(nameInDb = "USERNAME")
private int testName;
}
通過@Entity
那麼這個類便成了資料庫中的一張表,而@Id
此表明這是表的主鍵。當我們build工程之後我們會發現,GreenDAO替我們預設生成了:
關於Entity:
//直接Google翻譯的官方註釋
@Entity(
// 如果你有多個模式,你可以告訴greenDAO
// 實體所屬的模式(選擇任何字串作為名稱).
schema = "myschema",
// 使實體“活動”的標誌:活動實體具有更新,刪除和重新整理方法。
active = true,
// 指定資料庫中的表的名稱。 預設情況下,名稱基於實體類名稱。
nameInDb = "AWESOME_USERS",
// 在此處定義跨多個列的索引。
indexes = {
@Index(value = "name DESC", unique = true)
},
// 標記DAO是否應該建立資料庫表(預設值為true)。
// 如果您有多個實體對映到一個表,或者表的建立是在greenDAO之外建立的,
// 則將此屬性設定為false。
createInDb = false,
// 是否應生成所有屬性建構函式。
// 總是需要一個無引數的建構函式。
generateConstructors = true,
// 如果缺少,應該生成屬性的getter和setter。
generateGettersSetters = true
)
關於Property:
@Property允許您定義屬性對映到的非預設列名稱。如果不存在,greenDAO將以SQL-ish方式使用欄位名(大寫字母,下劃線代替駝峰,例如 customName將成為 CUSTOM_NAME)。注意:您當前只能使用內聯常量來指定列名稱。
表以及欄位的預設值:
greenDAO嘗試使用合理的預設值,因此開發人員不必配置每一個位。
例如,資料庫側的表和列名稱派生自實體和屬性名稱。而不是在Java中使用的駱駝案例樣式,預設資料庫名稱使用大寫,使用下劃線分隔單詞。
例如,名為creationDate的屬性 將成為資料庫列 CREATION_DATE。
簡單的操作資料庫:
建立資料庫:
DaoMaster.DevOpenHelper devOpenHelper=new DaoMaster.DevOpenHelper(context,"test.db");
SQLiteDatabase database = devOpenHelper.getWritableDatabase();
DaoSession daoSession = new DaoMaster(database).newSession();
QuestionDao questionDao = daoSession.getQuestionDao();
當我們獲取questionDao
物件之後,我們便可以很方便的操作資料庫了。
//查詢表中所有資訊
collectQuestionDao.queryBuilder().list();
//按條件查詢
collectQuestionDao.queryBuilder()
.where(CollectQuestionDao.Properties.TestName
.eq("aaa")).list();
//限制,分頁
collectQuestionDao.queryBuilder()
.limit(5)
.offset(5)
.list();
//簡單的插入:
collectQuestionDao.insert(collectQuestion);
//通過主鍵刪除:
collectQuestionDao.deleteByKey(1L);
//更新
question.setTestName("bbb");
collectQuestionDao.update(question);
//更多用法,請直接上官網
開啟已有的資料庫:做法很簡單。和我們正常開啟內建的資料庫沒什麼兩樣。
開啟assets中的資料庫
首先要封裝一個返回SQLiteDatabase
物件的類。
public class MySQLiteDatabase {
String filePath = "data/data/com.aopa/data.db";
String pathStr = "data/data/com.aopa/databases";
public SQLiteDatabase openDatabase(Context context){
File jhPath=new File(filePath);
if(jhPath.exists()){
return SQLiteDatabase.openOrCreateDatabase(jhPath, null);
}else{
File path=new File(pathStr);
if (path.mkdir()){
}else{
}
try {
InputStream is=context.getClass().getClassLoader().getResourceAsStream("assets/"+"data.db");
FileOutputStream fos=new FileOutputStream(jhPath);
byte[] buffer=new byte[10240];
int count = 0;
while((count = is.read(buffer))>0){
fos.write(buffer,0,count);
}
fos.flush();
fos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
return openDatabase(context);
}
}
}
然後按套路來建立DaoSession
即可。
MySQLiteDatabase s = new MySQLiteDatabase ();
SQLiteDatabase db = s.openDatabase(App.getInstance().getContext());
DaoSession daoSession = new DaoMaster(db).newSession();
OK,到此我們就可以正常的操作資料庫了。
尾聲
如果看的直迷糊,你可拉到吧,別看了。民主富強革命火炬的傳承,靠的是我們這些祖國的花朵,王者農藥挺好玩的,還不快去上分。
更多用法還是直接進官網來的快:http://greenrobot.org/greendao/documentation/
相關推薦
Android雜談(22)GreenDAO的使用
我和一幫應屆生同學維護了一個公眾號:IT面試填坑小分隊。旨在幫助應屆生從學生過度到開發者,並且每週樹立學習目標,一同進步! 寫在前面 很久沒有寫部落格了,沒辦法。國際局勢著實有點跳脫,腐朽的美帝資本主義能的簡直要上天了。把不要臉的精神發揮的淋淋盡
Android雜談(14)OKHttp+Gson的簡單使用
轉載請注意:http://blog.csdn.net/wjzj000/article/details/52562674 本菜GitHub上開源了一個小的Android專案,感興趣的看官大大們可以star下: https://github.com/zhiaixinyan
Android雜談(11)更換Androidstudio快取配置目錄,減少c盤壓力
轉載請注意:http://blog.csdn.net/wjzj000/article/details/52424496 我和一幫應屆生同學維護了一個公眾號:IT面試填坑小分隊。旨在幫助應、屆生從學生過度到開發者,並且每週樹立學習目標,一同進步! 剛剛發現
Android面試題(22)-lruCache與DiskLruCache快取詳解
關於lruCache(最近最少使用)的演算法,這是一個比較重要的演算法,它的應用非常廣泛,不僅僅在Android中使用,Linux系統等其他地方中也有使用;今天就來看一看這其中的奧祕;講到LruCache,就不得不講一講LinkedHashMap,而對於LinkedHashM
[Android]如何做一個崩潰率少於千分之三噶應用app(22)-元件化路由跳轉
大家好,我是蒼王。以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。 大家應該有看完我的第十二編簡書的頁面跳轉會清楚跨module的跳轉用Android原生來做是,需要使用隱式跳轉完成。 但是原生跳轉方式是有很多的侷限性的。這裡借用AR
Android 資料加密及安全網路通訊雜談(一)
Android 資料加密及安全網路通訊雜談 前言:本人多年從事軟體開發,發現大多數程式設計師(其中包括不少是資深的)、CTO、PM們對資訊保安的瞭解幾乎為零!很多時候,專案負責人在不得不面對資訊保安需求時,隨意指派某個程式設計師(通常還是入行時間最短、技術經驗最少的那位)負
ActiveMQ(22):Consumer高級特性之消息分組(Message Groups)
jms message groups activemq 一、簡介Message Groups就是對消息分組,它是Exclusive Consumer功能的增強。邏輯上,Message Groups 可以看成是一種並發的Exclusive Consumer。跟所有的消息都由唯一的consumer處理
如何運行容器?- 每天5分鐘玩轉 Docker 容器技術(22)
docker 教程 容器 上一章我們學習了如何構建 Docker 鏡像,並通過鏡像運行容器。本章將深入討論容器:學習容器的各種操作,容器各種狀態之間如何轉換,以及實現容器的底層技術。運行容器docker run 是啟動容器的方法。在討論 Dockerfile 時我們已經學習到,可用三種方式指定容器
android weight(權重)的詳細分析
關註 一段 sum 比例 .net orien 2個 背景 wid 首先要明確權重分配的是那些空間? 權重是依照比例分配屏幕的剩余空間 對這句話不理解的能夠看下圖 假如我們希望剩余的空間平分給空間1 和空間2 , 我們分別在2個控件的設置and
設計模式解密(22)- 訪問者模式
ges action oid 使用 復合 con 9.png ava array 前言:訪問者模式拆分 訪問者模式基礎篇 :http://www.cnblogs.com/JsonShare/p/7380772.html 訪問者模式擴展篇 - 分派的概念: htt
設計模式解密(22)- 訪問者模式 - 擴展篇(分派的概念)
綁定 接受 傳遞 ble 實例 擴展 back exp 重載方法 前言:訪問者模式拆分 訪問者模式基礎篇 :http://www.cnblogs.com/JsonShare/p/7380772.html 訪問者模式擴展篇 - 分派的概念: http://www.cn
Akka(22): Stream:實時操控:動態管道連接-MergeHub,BroadcastHub and PartitionHub
urn abs bound parameter code 結果類型 subscribe mil 又是 在現實中我們會經常遇到這樣的場景:有一個固定的數據源Source,我們希望按照程序運行狀態來接駁任意數量的下遊接收方subscriber、又或者我需要在程序運行時(ru
深入淺出數據結構C語言版(22)——排序決策樹與桶式排序
不改變 自然 只需要 都是 變種 限定 style buck oid 在(17)中我們對排序算法進行了簡單的分析,並得出了兩個結論: 1.只進行相鄰元素交換的排序算法時間復雜度為O(N2) 2.要想時間復雜度低於O(N2),算法必須進行遠距離的元素交換
讀《Android電視機(機頂盒)初次開發的一些經驗分享》後的筆記
方便 實現 radi 麻煩 lamp 順時針 焦點控制 href ott 原文: http://blog.csdn.net/tanghongchang123/article/details/52982818 一、基本命令: 1、adb connect [ip] 2、 a
Linux學習筆記(22)
22一、yum更換國內源時候自帶的yum源是國外的很慢,這個時候可以換成國內163的源刪除/etc/yum.repos.d/centos-Base文件用這兩條命令下載一個新的Base163文件,yum clean all yum repolist all 查看所有源的可用情況二、yum下載rpm包yum
每天一個linux命令(22):tar命令
soft 小文件 sof linu gunzip 算法 rect 過程 提取文件 通過SSH訪問服務器,難免會要用到壓縮,解壓縮,打包,解包等,這時候tar命令就是是必不可少的一個功能強大的工具。linux中最流行的tar是麻雀雖小,五臟俱全,功能強大。 tar命令可以為l
Python實用筆記 (22)面向對象編程——實例屬性和類屬性
keyword com HA class python int def pytho obj 由於Python是動態語言,根據類創建的實例可以任意綁定屬性。 給實例綁定屬性的方法是通過實例變量,或者通過self變量: class Student(object): de
Android廣播(BroacastReceiver)與服務(Service)
com 還要 activit pro service 動態註冊 let onclick nds BroadcastReceiver可以理解成是一種組件,是默默的在改後臺運行的,用於在不同軟件和不同組件之間的傳遞,無法被用戶感知,因為他在系統的內部工作,BroadcastRe
設計模式學習之責任鏈模式(Chain of Responsibility,行為型模式)(22)
分析 一定的 之間 ash 我們 set 抽象 request 發現 參考:http://www.cnblogs.com/zhili/p/ChainOfResponsibity.html 一、引言 在現實生活中,有很多請求並不是一個人說了就算的,例如面試時的工資,低
Android MVC(一) MVC簡介
mvc tar .com 程序 tro view 用戶界面 lis 代碼 今天有朋友和我提到Android中的MVC模式,自己就在這裏總結下,如有不妥,大家盡情批評指教 MVC框架簡介 MVC全名是Model View Controller,是模型(model)-視圖(