GreenDao3.2簡介
Android開發(fā)中我們或多或少都會(huì)接觸到數(shù)據(jù)庫辞居。Android中提供了一個(gè)占用內(nèi)存極小的關(guān)系型數(shù)據(jù)庫-SQLite。雖然Android系統(tǒng)中提供了許多操作SQLite的API垛吗,但是我們還是需要手動(dòng)去編寫SQL語句,這經(jīng)常會(huì)出現(xiàn)一些莫名其妙的問題烁登。所以便出現(xiàn)了許多ORM(對象關(guān)系映射)框架怯屉。其中比較著名的有GreenDao等。
1.性能最大化饵沧,可能是Android平臺(tái)上最快的ORM框架
2.易于使用的API
3.最小的內(nèi)存開銷
4.依賴體積小
5.支持?jǐn)?shù)據(jù)庫加密
6.強(qiáng)大的社區(qū)支持
GreenDao3.2使用本地?cái)?shù)據(jù)庫
GreenDao基本使用簡單锨络,但是不注意的話也是很難發(fā)現(xiàn)問題。下面直接進(jìn)入主題:
數(shù)據(jù)庫的表格式如下:
數(shù)據(jù)庫在項(xiàng)目里面的位置:
拷貝數(shù)據(jù)庫代碼
我們確定了需要拷貝的路徑databasepath并創(chuàng)建了異步任務(wù)mCopyDataBaseTask狼牺;
接下來我們定義了兩個(gè)方法getDatabaseFilepath羡儿、getDatabaseFile,前者是獲取了將要拷貝的目錄是钥,后者是獲取了數(shù)據(jù)庫文件的路徑掠归。
經(jīng)過一系列的判斷語句我們最終執(zhí)行mCopyDataBaseTask.execute(sfile);
沒錯(cuò)缅叠,我們開始了異步任務(wù),傳入了數(shù)據(jù)庫文件的路徑虏冻。
我們來到AsyncTask肤粱,在doInBackground方法中我們通過getAssets方法來獲取AssetManger的引用(基礎(chǔ)薄弱的這里有必要解釋一下:assets文件夾里面的文件都是保持原始的文件格式,需要用AssetManager以字節(jié)流的形式讀取文件厨相。來自Resources和Assets 中的文件只可以讀取而不能進(jìn)行寫的操作领曼。)通過open方法我們得到字節(jié)流并寫入到指定的目錄文件中完成拷貝。
至此AsyncTask任務(wù)執(zhí)行完成蛮穿。
GreenDao的Bean類
值得注意的細(xì)節(jié)在Bean類Entity注解:
1.nameInDb:在數(shù)據(jù)庫中使用的別名悯森,默認(rèn)使用的是實(shí)體的類名,需要根據(jù)我們將要查詢的表面賦值绪撵。
接下來我們創(chuàng)建了數(shù)據(jù)庫實(shí)體類TvTable,@Property:設(shè)置一個(gè)非默認(rèn)關(guān)系映射所對應(yīng)的列名瓢姻,默認(rèn)是使用字段名,例如:@Property(nameInDb = "name")音诈。
重要的地方我們再說一次:
1.字段BRAND_CN幻碱,@Property(nameInDb = "BRAND_CN")這里一定要指定為“BRAND_CN”列名不然greenDao自動(dòng)生成的列名為BRAND__CN注意會(huì)多了一個(gè)下劃線,這個(gè)很重要细溅。自動(dòng)生成規(guī)則為首字母大寫駝峰使用下劃線代替褥傍,如nameEn--->Name_En;下面的MODEL不需要是因?yàn)樽詣?dòng)生成的還是這個(gè)名字。很重要喇聊。
2.字段ID恍风,注意這里一定要有 @Property(nameInDb = "ID")這個(gè)屬性,數(shù)據(jù)類型為Long或者long,很重要誓篱。
最后我們創(chuàng)建了queryInfraredDB查詢方法朋贬,通過queryRawCreate方法接受sqlRaw-sql語句,獲得Query窜骄。
遍歷Query從而獲取數(shù)據(jù)庫每個(gè)字段值锦募。