GreenDao3.2簡介
Android開發中我們或多或少都會接觸到數據庫。Android中提供了一個占用內存極小的關系型數據庫-SQLite。雖然Android系統中提供了許多操作SQLite的API,但是我們還是需要手動去編寫SQL語句,這經常會出現一些莫名其妙的問題。所以便出現了許多ORM(對象關系映射)框架。其中比較著名的有GreenDao等。
1.性能最大化,可能是Android平臺上最快的ORM框架
2.易于使用的API
3.最小的內存開銷
4.依賴體積小
5.支持數據庫加密
6.強大的社區支持
GreenDao3.2使用本地數據庫
GreenDao基本使用簡單,但是不注意的話也是很難發現問題。下面直接進入主題:
數據庫的表格式如下:
數據庫在項目里面的位置:
拷貝數據庫代碼
我們確定了需要拷貝的路徑databasepath并創建了異步任務mCopyDataBaseTask;
接下來我們定義了兩個方法getDatabaseFilepath、getDatabaseFile,前者是獲取了將要拷貝的目錄,后者是獲取了數據庫文件的路徑。
經過一系列的判斷語句我們最終執行mCopyDataBaseTask.execute(sfile);
沒錯,我們開始了異步任務,傳入了數據庫文件的路徑。
我們來到AsyncTask,在doInBackground方法中我們通過getAssets方法來獲取AssetManger的引用(基礎薄弱的這里有必要解釋一下:assets文件夾里面的文件都是保持原始的文件格式,需要用AssetManager以字節流的形式讀取文件。來自Resources和Assets 中的文件只可以讀取而不能進行寫的操作。)通過open方法我們得到字節流并寫入到指定的目錄文件中完成拷貝。
至此AsyncTask任務執行完成。
GreenDao的Bean類
值得注意的細節在Bean類Entity注解:
1.nameInDb:在數據庫中使用的別名,默認使用的是實體的類名,需要根據我們將要查詢的表面賦值。
接下來我們創建了數據庫實體類TvTable,@Property:設置一個非默認關系映射所對應的列名,默認是使用字段名,例如:@Property(nameInDb = "name")。
重要的地方我們再說一次:
1.字段BRAND_CN,@Property(nameInDb = "BRAND_CN")這里一定要指定為“BRAND_CN”列名不然greenDao自動生成的列名為BRAND__CN注意會多了一個下劃線,這個很重要。自動生成規則為首字母大寫駝峰使用下劃線代替,如nameEn--->Name_En;下面的MODEL不需要是因為自動生成的還是這個名字。很重要。
2.字段ID,注意這里一定要有 @Property(nameInDb = "ID")這個屬性,數據類型為Long或者long,很重要。
最后我們創建了queryInfraredDB查詢方法,通過queryRawCreate方法接受sqlRaw-sql語句,獲得Query。
遍歷Query從而獲取數據庫每個字段值。