前言
其實爲了方便我們對數據庫表進行管理,Android本身就提供了一個幫助類:SQLiteOpenHelper。這個類集創建和升級數據庫於一身,並且自動管理了數據庫版本,算是一個非常好用的工具。
簡述
LitePal是一款開源的Android數據庫框架,它採用了對象關係映射(ORM)的模式,並將我們平時開發時最常用到的一些數據庫功能進行了封裝,使得不用編寫一行SQL語句就可以完成各種建表、増刪改查的操作。
LitePal的基本用法
LitePal的配置
- 引入jar包、依賴或導入源碼庫
使用AS gradle依賴
dependencies {
compile 'org.litepal.android:core:1.5.0'
}
導入jar包和源碼可以點擊這裏選擇你需要的版本下載即可,下載好後具體操作就不細說了
- 配置litepal.xml
在項目的assets目錄下面新建一個litepal.xml文件,並將以下代碼拷貝進去:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo" />
<version value="1" />
<list>
<mapping class="" />
</list>
<!-- <dbname>是數據庫的名字
<version>是數據庫的版本號
<list>是數據庫的映射模型(數據庫表)
<mapping>是數據庫的映射模型的地址(數據庫表結構) -->
</litepal>
- 配置LitePalApplication
1).在AndroidManifest.xml中配置LitePalApplication,如下:
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
2).如果使用了自定義的Application繼承LitePalApplication即可
3).如果你項目中的自定義APP是繼承了一個jar包中的第三方Application(即:源碼修改不了)
方案一:
1. 你可以把LitePal的源碼下載下來,然後把src目錄下的所有代碼直接拷貝到你項目的src目錄下面
2. 接着打開LitePalApplication類,將它的繼承結構改成繼承自第三方Application
3. 再讓MyApplication繼承自LitePalApplication,這樣所有的Application就都可以在一起正常工作了
方案二:
public class MyOwnApplication extends AnotherApplication {
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
...
}
到這裏就完成了LitePal數據庫的配置
建表
根據對象關係映射模式的理念,每一張表都應該對應一個模型(Model),比如對應的News模型
//TODO 使用LitePal只有聲明private的字段纔會被映射到數據表中,如果不想映射的話,修飾符設置爲public、protected、default就可以了
public class News {
private int id;
private String title;
private String content;
private Date publishDate;
private int commentCount;
// getter、setter
}
建立後再配置到映射表中,編輯asset目錄下的litepal.xml的文件,在標籤下加入News模型類的聲明
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo"></dbname>
<version value="1"></version>
<list>
<mapping class="bz.sunlight.store.jeffdatabasetest.model.News"></mapping>
</list>
</litepal>
LitePal的增刪改查基本操作
LitePal要存儲數據,首先模型類要繼承DataSupport,繼承了DataSupport類之後,這些實體類就擁有了進行CRUD操作的能力。如下:
public class News extends DataSupport {
}
- 增加操作:
News news = new News(,,new Date(),2);
news.setTitle("這是 一條新聞標題");
news.setContent("這是一條新聞廣告");
news.setPublishDate(new Date());
news.setCommentCount(2);
news.save();
//id可以不用寫,在save完之後主鍵id會自動遞增賦值,還有save()操作是有返回值的,可以這樣
if (news.save()) {
Toast.makeText(context, "添加成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "添加失敗", Toast.LENGTH_SHORT).show();
}
- 修改操作
//第一種方法
News updateNews = new News();
updateNews.setContent("這是一條假數據");
updateNews.update(1);
//第二種方法
News updateNews = new News();
updateNews.setContent("這是一條假數據");
updateNews.updateAll("id = ?","2");
- 刪除操作
//刪除id爲2的數據
DataSupport.delete(News.class, 2);
// 刪除id爲1的數據
DataSupport.deleteAll(News.class, "id = ? ", "1");
// 刪除全部
DataSupport.deleteAll(News.class);
- 查詢操作
//查詢News表中id爲14的這條記錄
News news = DataSupport.find(News.class, 14);
//想要獲取News表中的第一條數據
News firstNews = DataSupport.findFirst(News.class);
//想要獲取News表中的最後一條數據
News lastNews = DataSupport.findLast(News.class);
//想把News表中id爲14、15、17的數據都查出來
List<News> mNewsList = DataSupport.findAll(News.class, 14, 15, 17);
//數據太多了,其實你只要前3行就行了
List<News> mNewsList1 = DataSupport.limit(3).find(News.class);
//想進行分頁展示,那麼翻頁了,怎麼辦?可以添加一個偏移量就好了
List<News> mNewsList2 = DataSupport.limit(3).offset(3).find(News.class);
好了,到目前爲止你已經算是對LitePal的用法入門了,本篇文章內容主要講的是表一對一的情況。有興趣的朋友也可以嘗試去實現多對一、一對多的表結構,只需要注意的的是在litepal.xml裏面的版本version升級和在List添加新建表的類,其他增刪改查形式都差不多。