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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android LitePal库详解

發(fā)布時(shí)間:2023/12/10 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android LitePal库详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 一、GitHub
  • 二、LitePal簡(jiǎn)介
  • 三、LitePal特征
  • 四、配置
    • 1.添加 LitePal 庫(kù)
    • 2.創(chuàng)建 litepal.xml 文件
    • 3. 配置 LitePalApplication
  • 五、開始使用
    • 1.創(chuàng)建表
    • 2. 升級(jí)表
    • 3. 保存數(shù)據(jù)
    • 4. 更新數(shù)據(jù)
    • 5. 刪除數(shù)據(jù)
    • 6. 查詢數(shù)據(jù)
    • 7. 多個(gè)數(shù)據(jù)庫(kù)
    • 8. Transaction
  • 六、混淆

一、GitHub

1、GitHub:鏈接

二、LitePal簡(jiǎn)介

LitePal 是一個(gè)開源 Android 庫(kù),它允許開發(fā)人員極其輕松地使用 SQLite 數(shù)據(jù)庫(kù)。無需編寫SQL語句即可完成大部分?jǐn)?shù)據(jù)庫(kù)操作,包括創(chuàng)建或升級(jí)表、crud操作、聚合函數(shù)等。 LitePal的設(shè)置也非常簡(jiǎn)單,不到5分鐘就可以將其集成到你的項(xiàng)目中分鐘。

三、LitePal特征

  • 使用對(duì)象關(guān)系映射 (ORM) 模式。
  • 幾乎零配置(只有一個(gè)配置文件,屬性很少)。
  • 自動(dòng)維護(hù)所有表(例如創(chuàng)建、更改或刪除表)。
  • 支持多數(shù)據(jù)庫(kù)。
  • 用于避免編寫 SQL 語句的封裝 API。
  • 很棒的流暢查詢 API。
  • 仍然使用 SQL 的替代選擇,但比原始 API更簡(jiǎn)單、更好。

四、配置

1.添加 LitePal 庫(kù)

在build.gradle文件添加以下依賴項(xiàng)。

dependencies {implementation 'org.litepal.guolindev:core:3.2.3' }

2.創(chuàng)建 litepal.xml 文件

main文件夾中創(chuàng)建assets文件夾,并在assets文件夾中創(chuàng)建一個(gè)文件,并將其命名為litepal.xml。然后把下面的代碼復(fù)制進(jìn)去。

<?xml version="1.0" encoding="utf-8"?> <litepal><!--定義應(yīng)用程序的數(shù)據(jù)庫(kù)名稱。默認(rèn)情況下,每個(gè)數(shù)據(jù)庫(kù)名稱應(yīng)以.db結(jié)尾。如果沒有將數(shù)據(jù)庫(kù)的結(jié)尾命名為.db,LitePal會(huì)自動(dòng)為你添加后綴。例如:<dbname value="demo" />--><dbname value="NewFriend" /><!--定義數(shù)據(jù)庫(kù)的版本。每次升級(jí)數(shù)據(jù)庫(kù)時(shí),版本標(biāo)簽都會(huì)有所幫助。修改你在mapping標(biāo)簽中定義的模型,只需將版本值加上一,數(shù)據(jù)庫(kù)的升級(jí)將自動(dòng)進(jìn)行,無需擔(dān)心。例如:<version value="1" />--><version value="1" /><!--在帶有映射標(biāo)記的列表中定義模型,LitePal將為每個(gè)映射類創(chuàng)建表。模型中定義的受支持字段將映射到列中。例如:<list><mapping class="com.test.model.Reader" /><mapping class="com.test.model.Magazine" /></list>--><list><mapping class="com.test.model.NewFriend" /></list><!--定義.db文件應(yīng)位于的位置。“internal”是指.db文件將存儲(chǔ)在任何人都無法訪問的internal storage的數(shù)據(jù)庫(kù)文件夾中。“external”是指.db文件將存儲(chǔ)在主外部存儲(chǔ)設(shè)備上的目錄路徑中,應(yīng)用程序可以將其擁有的所有人都可以訪問的持久文件放置在該目錄中。“internal”將作為默認(rèn)值。例如:<storage value="external" />--></litepal>

這是唯一的配置文件,屬性簡(jiǎn)單。

  • dbname:配置項(xiàng)目的數(shù)據(jù)庫(kù)名稱。
  • version:配置數(shù)據(jù)庫(kù)的版本。每次要升級(jí)數(shù)據(jù)庫(kù),加這里的值。
  • list:配置映射類。
  • storage:配置應(yīng)該存儲(chǔ)數(shù)據(jù)庫(kù)文件的位置。internal和external是唯一有效的選項(xiàng)。

3. 配置 LitePalApplication

你不想一直傳遞 Context 參數(shù)。為了使 API 變得簡(jiǎn)單,只需在AndroidManifest.xml 中配置 LitePalApplication如下:

<manifest><applicationandroid:name="org.litepal.LitePalApplication"...>...</application> </manifest>

當(dāng)然你可能有自己的應(yīng)用程序并且已經(jīng)在這里配置好了,比如:

<manifest><applicationandroid:name="com.example.MyApplication"...>...</application> </manifest>

沒關(guān)系。LitePal 仍然可以接受。只需在你自己的應(yīng)用程序中調(diào)用LitePal.initialize(context)

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();LitePal.initialize(this);} }

確保盡早調(diào)用此方法。在 ApplicationonCreate() 方法中就可以了。并且永遠(yuǎn)記住使用應(yīng)用程序上下文作為參數(shù)。不要使用任何活動(dòng)或服務(wù)的實(shí)例作為參數(shù),否則可能會(huì)發(fā)生內(nèi)存泄漏。

五、開始使用

1.創(chuàng)建表

首先定義模型。例如,你有兩個(gè)模型,AlbumSong,都繼承LitePalSupport 。這些模型可以定義如下:

public class Album extends LitePalSupport {@Column(unique = true, defaultValue = "unknown")private String name;@Column(index = true)private float price;private List<Song> songs = new ArrayList<>();// 生成getter和setter方法。... } public class Song extends LitePalSupport {@Column(nullable = false)private String name;private int duration;@Column(ignore = true)private String uselessField;private Album album;// 生成getter和setter方法。... }

然后將這些模型添加到 litepal.xml 中的映射列表中:

<list><mapping class="org.litepal.litepalsample.model.Album" /><mapping class="org.litepal.litepalsample.model.Song" /> </list>

下次操作數(shù)據(jù)庫(kù)時(shí)會(huì)生成這些表。例如,使用以下代碼獲取 SQLiteDatabase

SQLiteDatabase db = LitePal.getDatabase();

現(xiàn)在這些表將使用 SQL 自動(dòng)生成,如下所示:

CREATE TABLE album (id integer primary key autoincrement,name text unique default 'unknown',price real );CREATE TABLE song (id integer primary key autoincrement,name text not null,duration integer,album_id integer );

2. 升級(jí)表

在 LitePal 中升級(jí)表非常容易。只需修改你的模型即可:

public class Album extends LitePalSupport {@Column(unique = true, defaultValue = "unknown")private String name;@Column(ignore = true)private float price;private Date releaseDate;private List<Song> songs = new ArrayList<>();// 生成的getter和setter方法。... }

添加了一個(gè) releaseDate 字段,并注釋了 price 字段以忽略。然后在litepal.xml 中增加版本號(hào):

<!--定義數(shù)據(jù)庫(kù)的版本。每次升級(jí)數(shù)據(jù)庫(kù)時(shí),版本標(biāo)簽都會(huì)有所幫助。修改你在mapping標(biāo)簽中定義的模型,只需將版本值加上一,數(shù)據(jù)庫(kù)的升級(jí)將自動(dòng)進(jìn)行,無需擔(dān)心。例如:<version value="1" />--><version value="2" />

下次操作數(shù)據(jù)庫(kù)時(shí)會(huì)升級(jí)這些表。album 表中將增加一個(gè) releaseDate 列,并刪除原來的 price 列。album 表中除刪除的列之外的所有數(shù)據(jù)都將保留。

但是有一些升級(jí)情況是 LitePal 無法處理的,升級(jí)表中的所有數(shù)據(jù)都會(huì)被清理:

  • 添加一個(gè)注釋為 的字段 unique = true
  • 將字段的注釋更改為 unique = true
  • 將字段的注釋更改為 nullable =false

請(qǐng)注意上述會(huì)導(dǎo)致數(shù)據(jù)丟失的情況。

3. 保存數(shù)據(jù)

保存 API 是非常面向?qū)ο蟮摹?LitePalSupport 繼承的每個(gè)模型都將免費(fèi)擁有 save() 方法。

java:

Album album = new Album(); album.setName("album"); album.setPrice(10.99f); album.setCover(getCoverImageBytes()); album.save();Song song1 = new Song(); song1.setName("song1"); song1.setDuration(320); song1.setAlbum(album); song1.save();Song song2 = new Song(); song2.setName("song2"); song2.setDuration(356); song2.setAlbum(album); song2.save();

Kotlin:

val album = Album() album.name = "album" album.price = 10.99f album.cover = getCoverImageBytes() album.save()val song1 = Song() song1.name = "song1" song1.duration = 320 song1.album = album song1.save()val song2 = Song() song2.name = "song2" song2.duration = 356 song2.album = album song2.save()

這會(huì)將album、song1 和 song2 插入到關(guān)聯(lián)的數(shù)據(jù)庫(kù)中。

4. 更新數(shù)據(jù)

最簡(jiǎn)單的方法,使用 save() 方法更新 find() 找到的記錄。

Java:

Album albumToUpdate = LitePal.find(Album.class, 1); albumToUpdate.setPrice(20.99f); // 提高價(jià)格 albumToUpdate.save();

Kotlin:

val albumToUpdate = LitePal.find<Album>(1) albumToUpdate.price = 20.99f // 提高價(jià)格 albumToUpdate.save()

LitePalSupport 繼承的每個(gè)模型也將具有 update()updateAll() 方法。你可以使用指定的 id 更新單個(gè)記錄。

Java:

Album albumToUpdate = new Album(); albumToUpdate.setPrice(20.99f); // 提高價(jià)格 albumToUpdate.update(id);

Kotlin:

val albumToUpdate = Album() albumToUpdate.price = 20.99f // 提高價(jià)格 albumToUpdate.update(id)

或者你可以使用 where 條件更新多個(gè)記錄。

Java:

Album albumToUpdate = new Album(); albumToUpdate.setPrice(20.99f); // 提高價(jià)格 albumToUpdate.updateAll("name = ?", "album");

Kotlin:

val albumToUpdate = Album() albumToUpdate.price = 20.99f // 提高價(jià)格 albumToUpdate.updateAll("name = ?", "album")

5. 刪除數(shù)據(jù)

可以使用 LitePal 中的靜態(tài) delete() 方法刪除單個(gè)記錄。

Java:

LitePal.delete(Song.class, id);

Kotlin:

LitePal.delete<Song>(id)

或者使用 LitePal 中的靜態(tài) deleteAll() 方法刪除多條記錄。

Java:

LitePal.deleteAll(Song.class, "duration > ?" , "350");

Kotlin:

LitePal.deleteAll<Song>("duration > ?" , "350")

6. 查詢數(shù)據(jù)

song 表中查找具有指定 id 的單個(gè)記錄。

Java:

Song song = LitePal.find(Song.class, id);

Kotlin:

val song = LitePal.find<Song>(id)

song 表中查找所有記錄。

Java:

List<Song> allSongs = LitePal.findAll(Song.class);

Kotlin:

val allSongs = LitePal.findAll<Song>()

用流利的查詢構(gòu)造復(fù)雜的查詢。

Java:

List<Song> songs = LitePal.where("name like ? and duration < ?", "song%", "200").order("duration").find(Song.class);

Kotlin:

val songs = LitePal.where("name like ? and duration < ?", "song%", "200").order("duration").find<Song>()

7. 多個(gè)數(shù)據(jù)庫(kù)

如果你的應(yīng)用需要多個(gè)數(shù)據(jù)庫(kù),LitePal 完全支持。你可以在運(yùn)行時(shí)創(chuàng)建任意數(shù)量的數(shù)據(jù)庫(kù)。例如:

LitePalDB litePalDB = new LitePalDB("demo2", 1); litePalDB.addClassName(Singer.class.getName()); litePalDB.addClassName(Album.class.getName()); litePalDB.addClassName(Song.class.getName()); LitePal.use(litePalDB);

這將創(chuàng)建一個(gè)包含 singeralbumsong 表的 demo2 數(shù)據(jù)庫(kù)。

如果你只想創(chuàng)建一個(gè)新數(shù)據(jù)庫(kù)但與 litepal.xml 具有相同的配置,你可以使用:

LitePalDB litePalDB = LitePalDB.fromDefault("newdb"); LitePal.use(litePalDB);

還可以隨時(shí)切換回默認(rèn)數(shù)據(jù)庫(kù):

LitePal.useDefault();

還可以通過指定的數(shù)據(jù)庫(kù)名稱刪除任何數(shù)據(jù)庫(kù):

LitePal.deleteDatabase("newdb");

8. Transaction

LitePal 支持原子數(shù)據(jù)庫(kù)操作的事務(wù)。事務(wù)中的所有操作將一起提交或回滾

Java usage:

LitePal.beginTransaction(); boolean result1 = // db operation1 boolean result2 = // db operation2 boolean result3 = // db operation3 if (result1 && result2 && result3) {LitePal.setTransactionSuccessful(); } LitePal.endTransaction();

Kotlin usage:

LitePal.runInTransaction {val result1 = // db operation1val result2 = // db operation2val result3 = // db operation3result1 && result2 && result3 }

六、混淆

1、如果你使用 ProGuard,你可能需要添加以下選項(xiàng):

-keep class org.litepal.** {*;} -keep class * extends org.litepal.crud.LitePalSupport {*;}

總結(jié)

以上是生活随笔為你收集整理的Android LitePal库详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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