日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android创建数据表和LitePal的基本用法

發(fā)布時(shí)間:2025/3/20 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android创建数据表和LitePal的基本用法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文屬于轉(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
  • public?class?MySQLiteHelper?extends?SQLiteOpenHelper?{??
  • ??
  • ????public?MySQLiteHelper(Context?context,?String?name,?CursorFactory?factory,??
  • ????????????int?version)?{??
  • ????????super(context,?name,?factory,?version);??
  • ????}??
  • ??
  • ????@Override??
  • ????public?void?onCreate(SQLiteDatabase?db)?{??
  • ????}??
  • ??
  • ????@Override??
  • ????public?void?onUpgrade(SQLiteDatabase?db,?int?oldVersion,?int?newVersion)?{??
  • ????}??
  • ??
  • }??
  • 其中,當(dāng)數(shù)據(jù)庫(kù)創(chuàng)建的時(shí)候會(huì)調(diào)用onCreate()方法,在這里去執(zhí)行建表操作就可以了。比如說(shuō)我們想新建一張news表,其中有title,content,publishdate,commentcount這幾列,分別代表著新聞標(biāo)題、新聞內(nèi)容、發(fā)布時(shí)間和評(píng)論數(shù),那么代碼就可以這樣寫: [java]?view plaincopy
  • public?class?MySQLiteHelper?extends?SQLiteOpenHelper?{??
  • ??????
  • ????public?static?final?String?CREATE_NEWS?=?"create?table?news?("??
  • ????????????+?"id?integer?primary?key?autoincrement,?"??
  • ????????????+?"title?text,?"??
  • ????????????+?"content?text,?"??
  • ????????????+?"publishdate?integer,"??
  • ????????????+?"commentcount?integer)";??
  • ??
  • ????public?MySQLiteHelper(Context?context,?String?name,?CursorFactory?factory,??
  • ????????????int?version)?{??
  • ????????super(context,?name,?factory,?version);??
  • ????}??
  • ??
  • ????@Override??
  • ????public?void?onCreate(SQLiteDatabase?db)?{??
  • ????????db.execSQL(CREATE_NEWS);??
  • ????}??
  • ????...??
  • }??
  • 可以看到,我們把建表語(yǔ)句定義成了一個(gè)常量,然后在onCreate()方法中去執(zhí)行了這條建表語(yǔ)句,news表也就創(chuàng)建成功了。這條建表語(yǔ)句雖然簡(jiǎn)單,但是里面還是包含了一些小的細(xì)節(jié),我來(lái)解釋一下。首先,根據(jù)數(shù)據(jù)庫(kù)的范式要求,任何一張表都應(yīng)該是有主鍵的,所以這里我們添加了一個(gè)自增長(zhǎng)的id列,并把它設(shè)為主鍵。然后title列和content列都是字符串類型的,commentcount列是整型的,這都很好理解,但是publishdate列該怎么設(shè)計(jì)呢?由于SQLite中并不支持存儲(chǔ)日期這種數(shù)據(jù)類型,因此我們需要將日期先轉(zhuǎn)換成UTC時(shí)間(自1970年1月1號(hào)零點(diǎn))的毫秒數(shù),然后再存儲(chǔ)到數(shù)據(jù)庫(kù)中,因此publishdate列也應(yīng)該是整型的。

    現(xiàn)在,我們只需要獲取到SQLiteDatabase的實(shí)例,數(shù)據(jù)庫(kù)表就會(huì)自動(dòng)創(chuàng)建了,如下所示:

    [java]?view plaincopy
  • SQLiteOpenHelper?dbHelper?=?new?MySQLiteHelper(this,?"demo.db",?null,?1);??
  • SQLiteDatabase?db?=?dbHelper.getWritableDatabase();??
  • 感覺(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 plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <litepal>??
  • ????<dbname?value="demo"?></dbname>??
  • ??
  • ????<version?value="1"?></version>??
  • ??
  • ????<list>??
  • ????</list>??
  • </litepal>??
  • 配置文件相當(dāng)簡(jiǎn)單,<dbname>用于設(shè)定數(shù)據(jù)庫(kù)的名字,<version>用于設(shè)定數(shù)據(jù)庫(kù)的版本號(hào),<list>用于設(shè)定所有的映射模型,我們稍后就會(huì)用到。

    3. 配置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
  • <manifest>??
  • ????<application??
  • ????????android:name="org.litepal.LitePalApplication"??
  • ????????...??
  • ????>??
  • ????...??
  • ????</application>??
  • </manifest>??
  • 當(dāng)然,有些程序可能會(huì)有自己的Application,并在這里配置過(guò)了。比如說(shuō)有一個(gè)MyApplication,如下所示: [html]?view plaincopy
  • <manifest>??
  • ????<application??
  • ????????android:name="com.example.MyApplication"??
  • ????????...??
  • ????>??
  • ????...??
  • ????</application>??
  • </manifest>??
  • 沒(méi)有關(guān)系,這時(shí)只需要修改一下MyApplication的繼承結(jié)構(gòu),讓它不要直接繼承Application類,而是繼承LitePalApplication類,就可以使用一切都能正常工作了,代碼如下所示: [java]?view plaincopy
  • public?class?MyApplication?extends?LitePalApplication?{??
  • ????...??
  • }??
  • 但是,有些程序可能會(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
  • package?com.example.databasetest.model;??
  • ??
  • public?class?News?{??
  • }??
  • 然后,表中的每一列其實(shí)就是對(duì)應(yīng)了模型類中的一個(gè)字段,比如news表中有id、title、content、publishdate、commentcount這幾個(gè)列,那么在News類中就也應(yīng)該有這幾個(gè)字段,代碼如下所示: [java]?view plaincopy
  • public?class?News?{??
  • ??????
  • ????private?int?id;??
  • ??????
  • ????private?String?title;??
  • ??????
  • ????private?String?content;??
  • ??????
  • ????private?Date?publishDate;??
  • ??????
  • ????private?int?commentCount;??
  • ??????
  • ????//?自動(dòng)生成get、set方法??
  • ????...??
  • }??
  • 其中id這個(gè)字段可寫可不寫,因?yàn)榧词共粚戇@個(gè)字段,LitePal也會(huì)在表中自動(dòng)生成一個(gè)id列,畢竟每張表都一定要有主鍵的嘛。

    這里我要特別說(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 plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <litepal>??
  • ????<dbname?value="demo"?></dbname>??
  • ??
  • ????<version?value="1"?></version>??
  • ??
  • ????<list>??
  • ????????<mapping?class="com.example.databasetest.model.News"></mapping>??
  • ????</list>??
  • </litepal>??
  • 注意這里一定要填入News類的完整類名。

    OK,這樣所有的工作就都已經(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
  • SQLiteDatabase?db?=?Connector.getDatabase();??
  • 調(diào)用一下上述代碼,news表就應(yīng)該已經(jīng)創(chuàng)建成功了。我們使用在上一篇文章中學(xué)到的SQLite命令來(lái)查看一下,打開(kāi)demo.db數(shù)據(jù)庫(kù),輸入.table命令,結(jié)果如下圖所示:


    可以看到,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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。