亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

LitePal的基本用法

2019-11-09 16:02:22
字體:
來源:轉載
供稿:網友

 我們學習了一些Android數據庫相關的基礎知識,和幾個頗為有用的SQLite命令,都是直接在命令行操作的。但是我們都知道,數據庫是要和程序結合在一起使用的,單獨對一個數據庫去進行増刪改查操作并沒有什么意義,因此今天我們就來學習一下如何在Android程序當中去操作SQLite數據庫,還沒看過前一篇文章的朋友可以先去參考 Android數據庫高手秘籍(一)——SQLite命令 。

操作數據庫的第一步當然是創建表了,傳統創建表的方法相信大多數人都知道,那么今天我除了會展示傳統的建表方法之外,還會講解LitePal這個框架的基本用法,并使用它來完成同樣的建表操作,讓大家體會到使用框架來操作數據庫的魅力。

那么先來簡單介紹一下吧,LitePal是一款開源的Android數據庫框架,它采用了對象關系映射(ORM)的模式,并將我們平時開發時最常用到的一些數據庫功能進行了封裝,使得不用編寫一行SQL語句就可以完成各種建表、増刪改查的操作。并且LitePal很“輕”,jar包只有100k不到,而且近乎零配置,這一點和Hibernate這類的框架有很大區別。目前LitePal的源碼已經托管到了GitHub上,地址是 https://github.com/LitePalFramework/LitePal 。

OK,簡單介紹完了LitePal,我們還是先來看一下,在傳統的Android開發中,需要怎么去創建表。

傳統的建表方式

其實為了方便我們對數據庫表進行管理,Android本身就提供了一個幫助類:SQLiteOpenHelper。這個類集創建和升級數據庫于一身,并且自動管理了數據庫版本,算是一個非常好用的工具。

那我們現在就來試試SQLiteOpenHelper的用法吧。首先你要知道SQLiteOpenHelper是一個抽象類,這意味著如果我們想要使用它的話,就需要創建一個自己的幫助類去繼承它。SQLiteOpenHelper中有兩個抽象方法,分別是onCreate()和onUpgrade(),我們必須在自己的幫助類里面重寫這兩個方法,然后分別在這兩個方法中去實現創建、升級數據庫的邏輯。本篇文章只需要把注意力放在創建數據庫這里就行了,升級數據庫我們會在下一篇文章中去討論。

新建一個MySQLiteHelper類并讓它繼承SQLiteOpenHelper,這樣一個最基本的數據庫幫助類的代碼如下所示:

?
12345678910111213141516publicclass MySQLiteHelper extendsSQLiteOpenHelper {     publicMySQLiteHelper(Context context, String name, CursorFactory factory,            intversion) {        super(context, name, factory, version);    }     @Override    publicvoid onCreate(SQLiteDatabase db) {    }     @Override    publicvoid onUpgrade(SQLiteDatabase db, intoldVersion, intnewVersion) {    } }
其中,當數據庫創建的時候會調用onCreate()方法,在這里去執行建表操作就可以了。比如說我們想新建一張news表,其中有title,content,publishdate,commentcount這幾列,分別代表著新聞標題、新聞內容、發布時間和評論數,那么代碼就可以這樣寫:?
1234567891011121314151617181920publicclass MySQLiteHelper extendsSQLiteOpenHelper {         publicstatic final String CREATE_NEWS = create table news (            + id integer PRimary key autoincrement,             + title text,             + content text,             + publishdate integer,            + commentcount integer);     publicMySQLiteHelper(Context context, String name, CursorFactory factory,            intversion) {        super(context, name, factory, version);    }     @Override    publicvoid onCreate(SQLiteDatabase db) {        db.execSQL(CREATE_NEWS);    }    ...}
可以看到,我們把建表語句定義成了一個常量,然后在onCreate()方法中去執行了這條建表語句,news表也就創建成功了。這條建表語句雖然簡單,但是里面還是包含了一些小的細節,我來解釋一下。首先,根據數據庫的范式要求,任何一張表都應該是有主鍵的,所以這里我們添加了一個自增長的id列,并把它設為主鍵。然后title列和content列都是字符串類型的,commentcount列是整型的,這都很好理解,但是publishdate列該怎么設計呢?由于SQLite中并不支持存儲日期這種數據類型,因此我們需要將日期先轉換成UTC時間(自1970年1月1號零點)的毫秒數,然后再存儲到數據庫中,因此publishdate列也應該是整型的。

 

現在,我們只需要獲取到SQLiteDatabase的實例,數據庫表就會自動創建了,如下所示:

?
12SQLiteOpenHelper dbHelper = newMySQLiteHelper(this, demo.db, null,1);SQLiteDatabase db = dbHelper.getWritableDatabase();

感覺很簡單很方便是嗎?那你就太容易滿足了,下面我們就來學習一下LitePal的基本用法,看一看使用這個框架是如何實現同樣的功能的。

LitePal的基本用法

雖說LitePal宣稱是近乎零配置,但也只是“近乎”而已,它還是需要進行一些簡單配置才可以使用的,那么我們第一步就先快速學習一下LitePal的配置方法。

快速配置

1. 引入Jar包或源碼

首先我們需要將LitePal的jar包引入到項目當中,可以點擊這里查看LitePal的最新版本,選擇你需要的下載即可。下載好了jar包之后,把它復制到項目的libs目錄中就算是引入成功了,如下圖所示:

/

如果你不想用jar包的話,也可以把LitePal的源碼下載下來,然后作為一個library庫導入到Eclipse當中,再讓我們的項目去引用這個library庫就可以了。

2. 配置litepal.xml

接著在項目的assets目錄下面新建一個litepal.xml文件,并將以下代碼拷貝進去:

?
123456789<!--?xml version=1.0encoding=utf-8?--><litepal>    <dbname value="demo"></dbname>     <version value="1"></version>     <list>    </list></litepal>
配置文件相當簡單,用于設定數據庫的名字,用于設定數據庫的版本號,用于設定所有的映射模型,我們稍后就會用到。

 

3. 配置LitePalapplication

由于操作數據庫時需要用到Context,而我們顯然不希望在每個接口中都去傳一遍這個參數,那樣操作數據庫就顯得太繁瑣了。因此,LitePal使用了一個方法來簡化掉Context這個參數,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的數據庫操作就都不用再傳Context了,如下所示:

?
12345<manifest>         ...    </application></manifest>
當然,有些程序可能會有自己的Application,并在這里配置過了。比如說有一個MyApplication,如下所示:?
12345<manifest>         ...    </application></manifest>
沒有關系,這時只需要修改一下MyApplication的繼承結構,讓它不要直接繼承Application類,而是繼承LitePalApplication類,就可以使用一切都能正常工作了,代碼如下所示:?
123publicclass MyApplication extendsLitePalApplication {    ...}

但是,有些程序可能會遇到一些更加極端的情況,比如說MyApplication需要繼承另外一個AnotherApplication,并且這個AnotherApplication還是在jar包當中的,不能修改它的代碼。這種情況應該算是比較少見了,但是如果你遇到了的話也不用急,仍然是有解釋方案的。你可以把LitePal的源碼下載下來,然后把src目錄下的所有代碼直接拷貝到你項目的src目錄下面,接著打開LitePalApplication類,將它的繼承結構改成繼承自AnotherApplication,再讓MyApplication繼承自LitePalApplication,這樣所有的Application就都可以在一起正常工作了。

僅僅三步,我們就將所有的配置工作全部完成了,并且這是一件一本萬利的事情,自此以后,你就可以開心地體驗LitePal提供的各種便利了,就讓我們從建表開始吧。

開始建表

前面在介紹的時候已經說了,LitePal采取的是對象關系映射(ORM)的模式,那么什么是對象關系映射呢?簡單點說,我們使用的編程語言是面向對象語言,而我們使用的數據庫則是關系型數據庫,那么將面向對象的語言和面向關系的數據庫之間建立一種映射關系,這就是對象關系映射了。

但是我們為什么要使用對象關系映射模式呢?這主要是因為大多數的程序員都很擅長面向對象編程,但其中只有少部分的人才比較精通關系型數據庫。而且數據庫的SQL語言晦澀難懂,就算你很精通它,恐怕也不喜歡經常在代碼中去寫它吧?而對象關系映射模式則很好地解決了這個問題,它允許我們使用面向對象的方式來操作數據庫,從而可以從晦澀難懂的SQL語言中解脫出來。

那么接下來我們就看一看LitePal中是如何建表的吧。根據對象關系映射模式的理念,每一張表都應該對應一個模型(Model),也就是說,如果我們想要建一張news表,就應該有一個對應的News模型類。新建一個News類,如下所示:

?
1234packagecom.example.databasetest.model; publicclass News {}
然后,表中的每一列其實就是對應了模型類中的一個字段,比如news表中有id、title、content、publishdate、commentcount這幾個列,那么在News類中就也應該有這幾個字段,代碼如下所示:?
123456789101112131415publicclass News {         privateint id;         privateString title;         privateString content;         privateDate publishDate;         privateint commentCount;         // 自動生成get、set方法    ...}
其中id這個字段可寫可不寫,因為即使不寫這個字段,LitePal也會在表中自動生成一個id列,畢竟每張表都一定要有主鍵的嘛。

 

這里我要特別說明一下,LitePal的映射規則是非常輕量級的,不像一些其它的數據庫框架,需要為每個模型類單獨配置一個映射關系的XML,LitePal的所有映射都是自動完成的。根據LitePal的數據類型支持,可以進行對象關系映射的數據類型一共有8種,int、short、long、float、double、boolean、String和Date。只要是聲明成這8種數據類型的字段都會被自動映射到數據庫表中,并不需要進行任何額外的配置。

那么有的朋友可能會問了,既然是自動映射的話,如果News類中有一個字符串字段我并不想讓它映射到數據庫表中,這該怎么辦呢?對此,LitePal同樣采用了一種極為輕量的解決方案,只有聲明成private修飾符的字段才會被映射到數據庫表中,如果你有某一個字段不想映射的話,只需要將它改成public、protected或default修飾符就可以了。

現在模型類已經建好了,我們還差最后一步,就是將它配置到映射列表當中。編輯assets目錄下的litepal.xml文件,在標簽中加入News模型類的聲明:

?
12345678910<!--?xml version=1.0encoding=utf-8?--><litepal>    <dbname value="demo"></dbname>     <version value="1"></version>     <list>        <mappingclass="com.example.databasetest.model.News"></mapping>    </list></litepal>
注意這里一定要填入News類的完整類名。

 

OK,這樣所有的工作就都已經完成了,現在只要你對數據庫有任何的操作,news表就會被自動創建出來。比如說LitePal提供了一個便捷的方法來獲取到SQLiteDatabase的實例,如下所示:

?
1SQLiteDatabase db = Connector.getDatabase();
調用一下上述代碼,news表就應該已經創建成功了。我們使用在上一篇文章中學到的SQLite命令來查看一下,打開demo.db數據庫,輸入.table命令,結果如下圖所示:

 

/

可以看到,news表已經存在了。另外兩張android_metadata和table_schema表是自動生成的,我們不用理。接下來我們還可以再查詢一下news表的建表語句,如下圖所示:

/

這就是LitePal根據News類中的字段自動幫我們生成的建表語句,由此也說明,建表操作已經成功完成了。

好了,到目前為止你已經算是對LitePal的用法有點入門了,那么本篇文章的內容就到這里,下篇文章當中我們將學習使用LitePal進行升級表的操作。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情a∨在线视频播放| 亚洲天堂男人的天堂| 欧美在线视频观看免费网站| 91国产高清在线| 欧美大片在线免费观看| 久久亚洲精品毛片| 日本国产欧美一区二区三区| 久久久久久这里只有精品| 92国产精品久久久久首页| 国产精品视频午夜| 亚洲欧洲免费视频| 日韩中文在线中文网三级| 欧美性猛交xxxxx免费看| 国内精品久久久久| 成人淫片在线看| 国产精品久久久久久久av大片| 亚洲精品成a人在线观看| 久久99久久99精品免观看粉嫩| 欧美精品激情blacked18| 欧美裸体视频网站| 午夜剧场成人观在线视频免费观看| 久久亚洲电影天堂| 日韩欧美在线一区| 亚洲人成电影网站色xx| 亚洲欧美另类自拍| 国产精品视频男人的天堂| 亚洲美女免费精品视频在线观看| 国产免费一区二区三区香蕉精| 色婷婷综合久久久久| 亚洲国产另类久久精品| 国产精品自产拍高潮在线观看| 欧美日韩国产va另类| 亚洲激情在线观看| 国产精品一区二区3区| 国产精品∨欧美精品v日韩精品| 午夜精品久久久久久久99黑人| 亚洲影院高清在线| 久久不射热爱视频精品| 亚洲精品一区二区三区不| 中日韩美女免费视频网站在线观看| 免费91麻豆精品国产自产在线观看| 国产丝袜精品第一页| 日韩av在线播放资源| 亚洲最大的成人网| 欧美一区二区三区免费视| 2018国产精品视频| 国产精品一区二区电影| 5566成人精品视频免费| 久久韩剧网电视剧| 国内精品视频一区| 俺去啦;欧美日韩| 欧美性极品xxxx娇小| 欧美性资源免费| 国产成人在线精品| 成人久久一区二区| 国产精品欧美亚洲777777| 欧美成人免费在线观看| 国产视频观看一区| 国产精品久久久久免费a∨大胸| 国产精品www色诱视频| 久久久久久亚洲精品中文字幕| 亚洲国产精品久久久久秋霞不卡| 亚洲色图15p| 91美女福利视频高清| 亚洲精品久久久久| 欧美日韩电影在线观看| 久久精品人人爽| 国产亚洲精品激情久久| 久久97久久97精品免视看| 亚洲国内高清视频| 国产91在线播放精品91| 亚洲国产成人精品久久久国产成人一区| 欧美日韩午夜剧场| 高清视频欧美一级| 亚洲精选在线观看| 久久久久久国产精品三级玉女聊斋| 51色欧美片视频在线观看| 欧美精品videosex牲欧美| 热草久综合在线| 亚洲欧洲黄色网| 欧美日韩国产激情| 欧美亚洲视频一区二区| 亚洲国产精品va在线看黑人| 日韩在线观看免费网站| 亚洲第一天堂av| 91在线观看免费| 中文字幕欧美专区| 亚洲综合中文字幕在线| 亚洲精品99久久久久中文字幕| 国产精品ⅴa在线观看h| 亚洲免费中文字幕| 97国产精品视频人人做人人爱| www.日本久久久久com.| 国产91精品久久久久久久| 久久五月天色综合| 亚洲欧美激情视频| 国产精品夜色7777狼人| 亚洲国产精品久久久久秋霞蜜臀| 中文字幕精品网| 成人h猎奇视频网站| 精品国产成人在线| 97精品一区二区三区| 久久久久久久一区二区| 77777少妇光屁股久久一区| 亚洲欧美日韩国产中文| 亚洲高清在线观看| 97免费视频在线| 欧洲永久精品大片ww免费漫画| 国产亚洲精品久久久久久777| 国内精品一区二区三区四区| 精品国产一区二区三区久久狼黑人| 国产精品27p| 91精品久久久久久久久久另类| 亚洲bt欧美bt日本bt| 狠狠干狠狠久久| 岛国精品视频在线播放| 亚洲网站视频福利| 精品久久久久久久久久国产| 色噜噜久久综合伊人一本| 狠狠久久五月精品中文字幕| 欧美激情精品久久久久久大尺度| 欧美大秀在线观看| 国产精品久久久久aaaa九色| 久热在线中文字幕色999舞| 成人黄色网免费| 成人淫片在线看| 欧美成人免费全部观看天天性色| 精品亚洲精品福利线在观看| 欧美精品久久久久久久| 国产精品美女主播在线观看纯欲| 日韩电影在线观看中文字幕| 久久深夜福利免费观看| 欧美成年人在线观看| 97av在线播放| 揄拍成人国产精品视频| 日韩精品亚洲视频| 亚洲最大激情中文字幕| 中文字幕在线观看亚洲| 国产一区二中文字幕在线看| 国产精品久久久久高潮| 成人国产精品日本在线| 久久99精品久久久久久噜噜| 在线观看视频亚洲| 亚洲精品免费网站| 亚洲人成亚洲人成在线观看| 91在线视频精品| 欧美激情视频免费观看| 国产精品视频网| 日韩精品中文字幕视频在线| 国产免费成人av| 亚洲国产精品成人一区二区| 久久久久久有精品国产| 免费91麻豆精品国产自产在线观看| 久久999免费视频| 日本精品久久久久久久| 色爱精品视频一区| 成人观看高清在线观看免费| 国产经典一区二区| 国产在线精品成人一区二区三区| 精品无人区太爽高潮在线播放| 中文字幕亚洲一区| 欧美国产激情18| 国产精品偷伦视频免费观看国产| 亚洲男人天堂古典|