Android创建数据表和LitePal的基本用法
本文屬于轉(zhuǎn)載,在此聲明,出處:http://blog.csdn.net/guolin_blog/article/details/38556989
并且感謝guolin分享了這么精彩的博文。以下正文:
上一篇文章中我們學(xué)習(xí)了一些Android數(shù)據(jù)庫(kù)相關(guān)的基礎(chǔ)知識(shí),和幾個(gè)頗為有用的SQLite命令,都是直接在命令行操作的。但是我們都知道,數(shù)據(jù)庫(kù)是要和程序結(jié)合在一起使用的,單獨(dú)對(duì)一個(gè)數(shù)據(jù)庫(kù)去進(jìn)行増刪改查操作并沒(méi)有什么意義,因此今天我們就來(lái)學(xué)習(xí)一下如何在Android程序當(dāng)中去操作SQLite數(shù)據(jù)庫(kù),還沒(méi)看過(guò)前一篇文章的朋友可以先去參考?Android數(shù)據(jù)庫(kù)高手秘籍(一)——SQLite命令?。
操作數(shù)據(jù)庫(kù)的第一步當(dāng)然是創(chuàng)建表了,傳統(tǒng)創(chuàng)建表的方法相信大多數(shù)人都知道,那么今天我除了會(huì)展示傳統(tǒng)的建表方法之外,還會(huì)講解LitePal這個(gè)框架的基本用法,并使用它來(lái)完成同樣的建表操作,讓大家體會(huì)到使用框架來(lái)操作數(shù)據(jù)庫(kù)的魅力。
那么先來(lái)簡(jiǎn)單介紹一下吧,LitePal是一款開(kāi)源的Android數(shù)據(jù)庫(kù)框架,它采用了對(duì)象關(guān)系映射(ORM)的模式,并將我們平時(shí)開(kāi)發(fā)時(shí)最常用到的一些數(shù)據(jù)庫(kù)功能進(jìn)行了封裝,使得不用編寫一行SQL語(yǔ)句就可以完成各種建表、増刪改查的操作。并且LitePal很“輕”,jar包只有100k不到,而且近乎零配置,這一點(diǎn)和Hibernate這類的框架有很大區(qū)別。目前LitePal的源碼已經(jīng)托管到了GitHub上,地址是?https://github.com/LitePalFramework/LitePal?。
OK,簡(jiǎn)單介紹完了LitePal,我們還是先來(lái)看一下,在傳統(tǒng)的Android開(kāi)發(fā)中,需要怎么去創(chuàng)建表。
傳統(tǒng)的建表方式
其實(shí)為了方便我們對(duì)數(shù)據(jù)庫(kù)表進(jìn)行管理,Android本身就提供了一個(gè)幫助類:SQLiteOpenHelper。這個(gè)類集創(chuàng)建和升級(jí)數(shù)據(jù)庫(kù)于一身,并且自動(dòng)管理了數(shù)據(jù)庫(kù)版本,算是一個(gè)非常好用的工具。
那我們現(xiàn)在就來(lái)試試SQLiteOpenHelper的用法吧。首先你要知道SQLiteOpenHelper是一個(gè)抽象類,這意味著如果我們想要使用它的話,就需要?jiǎng)?chuàng)建一個(gè)自己的幫助類去繼承它。SQLiteOpenHelper中有兩個(gè)抽象方法,分別是onCreate()和onUpgrade(),我們必須在自己的幫助類里面重寫這兩個(gè)方法,然后分別在這兩個(gè)方法中去實(shí)現(xiàn)創(chuàng)建、升級(jí)數(shù)據(jù)庫(kù)的邏輯。本篇文章只需要把注意力放在創(chuàng)建數(shù)據(jù)庫(kù)這里就行了,升級(jí)數(shù)據(jù)庫(kù)我們會(huì)在下一篇文章中去討論。
新建一個(gè)MySQLiteHelper類并讓它繼承SQLiteOpenHelper,這樣一個(gè)最基本的數(shù)據(jù)庫(kù)幫助類的代碼如下所示:
[java]?view plaincopy現(xiàn)在,我們只需要獲取到SQLiteDatabase的實(shí)例,數(shù)據(jù)庫(kù)表就會(huì)自動(dòng)創(chuàng)建了,如下所示:
[java]?view plaincopy感覺(jué)很簡(jiǎn)單很方便是嗎?那你就太容易滿足了,下面我們就來(lái)學(xué)習(xí)一下LitePal的基本用法,看一看使用這個(gè)框架是如何實(shí)現(xiàn)同樣的功能的。
LitePal的基本用法
雖說(shuō)LitePal宣稱是近乎零配置,但也只是“近乎”而已,它還是需要進(jìn)行一些簡(jiǎn)單配置才可以使用的,那么我們第一步就先快速學(xué)習(xí)一下LitePal的配置方法。
快速配置
1. 引入Jar包或源碼
首先我們需要將LitePal的jar包引入到項(xiàng)目當(dāng)中,可以點(diǎn)擊這里查看LitePal的最新版本,選擇你需要的下載即可。下載好了jar包之后,把它復(fù)制到項(xiàng)目的libs目錄中就算是引入成功了,如下圖所示:
如果你不想用jar包的話,也可以把LitePal的源碼下載下來(lái),然后作為一個(gè)library庫(kù)導(dǎo)入到Eclipse當(dāng)中,再讓我們的項(xiàng)目去引用這個(gè)library庫(kù)就可以了。
2. 配置litepal.xml
接著在項(xiàng)目的assets目錄下面新建一個(gè)litepal.xml文件,并將以下代碼拷貝進(jìn)去:
[html]?view plaincopy3. 配置LitePalApplication
由于操作數(shù)據(jù)庫(kù)時(shí)需要用到Context,而我們顯然不希望在每個(gè)接口中都去傳一遍這個(gè)參數(shù),那樣操作數(shù)據(jù)庫(kù)就顯得太繁瑣了。因此,LitePal使用了一個(gè)方法來(lái)簡(jiǎn)化掉Context這個(gè)參數(shù),只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的數(shù)據(jù)庫(kù)操作就都不用再傳Context了,如下所示:
[html]?view plaincopy但是,有些程序可能會(huì)遇到一些更加極端的情況,比如說(shuō)MyApplication需要繼承另外一個(gè)AnotherApplication,并且這個(gè)AnotherApplication還是在jar包當(dāng)中的,不能修改它的代碼。這種情況應(yīng)該算是比較少見(jiàn)了,但是如果你遇到了的話也不用急,仍然是有解釋方案的。你可以把LitePal的源碼下載下來(lái),然后把src目錄下的所有代碼直接拷貝到你項(xiàng)目的src目錄下面,接著打開(kāi)LitePalApplication類,將它的繼承結(jié)構(gòu)改成繼承自AnotherApplication,再讓MyApplication繼承自LitePalApplication,這樣所有的Application就都可以在一起正常工作了。
僅僅三步,我們就將所有的配置工作全部完成了,并且這是一件一本萬(wàn)利的事情,自此以后,你就可以開(kāi)心地體驗(yàn)LitePal提供的各種便利了,就讓我們從建表開(kāi)始吧。
開(kāi)始建表
前面在介紹的時(shí)候已經(jīng)說(shuō)了,LitePal采取的是對(duì)象關(guān)系映射(ORM)的模式,那么什么是對(duì)象關(guān)系映射呢?簡(jiǎn)單點(diǎn)說(shuō),我們使用的編程語(yǔ)言是面向?qū)ο笳Z(yǔ)言,而我們使用的數(shù)據(jù)庫(kù)則是關(guān)系型數(shù)據(jù)庫(kù),那么將面向?qū)ο蟮恼Z(yǔ)言和面向關(guān)系的數(shù)據(jù)庫(kù)之間建立一種映射關(guān)系,這就是對(duì)象關(guān)系映射了。
但是我們?yōu)槭裁匆褂脤?duì)象關(guān)系映射模式呢?這主要是因?yàn)榇蠖鄶?shù)的程序員都很擅長(zhǎng)面向?qū)ο缶幊?#xff0c;但其中只有少部分的人才比較精通關(guān)系型數(shù)據(jù)庫(kù)。而且數(shù)據(jù)庫(kù)的SQL語(yǔ)言晦澀難懂,就算你很精通它,恐怕也不喜歡經(jīng)常在代碼中去寫它吧?而對(duì)象關(guān)系映射模式則很好地解決了這個(gè)問(wèn)題,它允許我們使用面向?qū)ο蟮姆绞絹?lái)操作數(shù)據(jù)庫(kù),從而可以從晦澀難懂的SQL語(yǔ)言中解脫出來(lái)。
那么接下來(lái)我們就看一看LitePal中是如何建表的吧。根據(jù)對(duì)象關(guān)系映射模式的理念,每一張表都應(yīng)該對(duì)應(yīng)一個(gè)模型(Model),也就是說(shuō),如果我們想要建一張news表,就應(yīng)該有一個(gè)對(duì)應(yīng)的News模型類。新建一個(gè)News類,如下所示:
[java]?view plaincopy這里我要特別說(shuō)明一下,LitePal的映射規(guī)則是非常輕量級(jí)的,不像一些其它的數(shù)據(jù)庫(kù)框架,需要為每個(gè)模型類單獨(dú)配置一個(gè)映射關(guān)系的XML,LitePal的所有映射都是自動(dòng)完成的。根據(jù)LitePal的數(shù)據(jù)類型支持,可以進(jìn)行對(duì)象關(guān)系映射的數(shù)據(jù)類型一共有8種,int、short、long、float、double、boolean、String和Date。只要是聲明成這8種數(shù)據(jù)類型的字段都會(huì)被自動(dòng)映射到數(shù)據(jù)庫(kù)表中,并不需要進(jìn)行任何額外的配置。
那么有的朋友可能會(huì)問(wèn)了,既然是自動(dòng)映射的話,如果News類中有一個(gè)字符串字段我并不想讓它映射到數(shù)據(jù)庫(kù)表中,這該怎么辦呢?對(duì)此,LitePal同樣采用了一種極為輕量的解決方案,只有聲明成private修飾符的字段才會(huì)被映射到數(shù)據(jù)庫(kù)表中,如果你有某一個(gè)字段不想映射的話,只需要將它改成public、protected或default修飾符就可以了。
現(xiàn)在模型類已經(jīng)建好了,我們還差最后一步,就是將它配置到映射列表當(dāng)中。編輯assets目錄下的litepal.xml文件,在<list>標(biāo)簽中加入News模型類的聲明:
[html]?view plaincopyOK,這樣所有的工作就都已經(jīng)完成了,現(xiàn)在只要你對(duì)數(shù)據(jù)庫(kù)有任何的操作,news表就會(huì)被自動(dòng)創(chuàng)建出來(lái)。比如說(shuō)LitePal提供了一個(gè)便捷的方法來(lái)獲取到SQLiteDatabase的實(shí)例,如下所示:
[java]?view plaincopy
可以看到,news表已經(jīng)存在了。另外兩張android_metadata和table_schema表是自動(dòng)生成的,我們不用理。接下來(lái)我們還可以再查詢一下news表的建表語(yǔ)句,如下圖所示:
這就是LitePal根據(jù)News類中的字段自動(dòng)幫我們生成的建表語(yǔ)句,由此也說(shuō)明,建表操作已經(jīng)成功完成了。
好了,到目前為止你已經(jīng)算是對(duì)LitePal的用法有點(diǎn)入門了,那么本篇文章的內(nèi)容就到這里,下篇文章當(dāng)中我們將學(xué)習(xí)使用LitePal進(jìn)行升級(jí)表的操作。感興趣的朋友請(qǐng)繼續(xù)閱讀?Android數(shù)據(jù)庫(kù)高手秘籍(三)——使用LitePal升級(jí)表?。
LitePal開(kāi)源項(xiàng)目地址:
https://github.com/LitePalFramework/LitePal
總結(jié)
以上是生活随笔為你收集整理的Android创建数据表和LitePal的基本用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android细节问题总结(一)
- 下一篇: Android数据库LitePal的存储