GreenDao3.2使用本地(Assets)數據庫

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從而獲取數據庫每個字段值。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • //我所經歷的大數據平臺發展史(三):互聯網時代 ? 上篇http://www.infoq.com/cn/arti...
    葡萄喃喃囈語閱讀 51,342評論 10 200
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,552評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 時間能沖淡的,一定是因為不足夠重要。 看了一半兒的<健忘村>,有點兒香港味道的嘻哈瘋癲式的所謂幽默。看了一半出來走...
    yang_mengjie閱讀 362評論 0 2
  • 在喧囂里寫安靜 在荒涼里寫溫暖 在懈怠里寫向上 在頹喪里寫進取 在迷茫里寫光亮 在痛苦里寫哲思 …… 我在喧囂里讀...
    茶潤人生閱讀 216評論 0 0