LitePal 是一个开源的Android数据库框架,采用ORM的模式(将面向对象的语言和面向关系的数据库之间建立的一种映射关系)。
LitePal的使用文档地址是:https://github.com/LitePalFramework/LitePal
一:配置LitePal
1.在build.gradle中加入LitePal的引用:即(compile ‘org.litepal.android:core:1.5.1’)
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.2.0'
testCompile 'junit:junit:4.12'
compile 'org.litepal.android:core:1.5.1'
}
注意加入了加黑部分,1.5.1是版本号,最新的版本号可以在LitePal的主页上看。
2.配置litepal.xml文件。
在src下新建文件夹,命名为assets(这个目录防止资源文件,不会自动生成id,也不会自动占用空间),并创建一个litepal.xml文件,内容为:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--数据库名 -->
<dbname value="BookStore" />
<!--数据库版本号 -->
<version value="2" />
<!--数据库中的对象的映射类型 -->
<list>
</list>
</litepal>
3.在AndroidManifest.xml文件中稍作修改:(加入 android:name=”org.litepal.LitePalApplication
)
<application
android:name="org.litepal.LitePalApplication
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
...
</application>
这样,LitePal就配置好了可以使用了。
二 LitePal创建数据库
1.首先创建一个Book类,一定要继承DataSupport类:
public class Book extends DataSupport{
private int id;
private String name;
private String author;
private double price;
private int page;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
2.将Book类添加到映射模型列表中,修改litepal.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore" />
<version value="1" />
<list>
<mapping class="com.skylight.litepaltest.Book"/>
</list>
</litepal>
3.数据库的创建只需调用一句代码即可:
LitePal.getDatabase();
如果想要修改数据表,或添加表,直接在定义的类中修改,改好后把版本号添加1即可:
如:把Book表添加一个属性press,
public class Book extends DataSupport{
private int id;
private String name;
private String author;
private double price;
private int page;
private String press;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
}
然后修改版本号:
<version value="2" />
三 LitePal添加数据
直接给对象赋值,然后调用.save()方法。
如:
Book book=new Book();
book.setName("The Da Vinci Code");
book.setAuthor("Dan Brown");
book.setPage(454);
book.setPrice(16.96);
book.save();
这样即向数据库中添加了一条数据
四.LitePal更新数据
法一:
Book book1=new Book();
book1.setName("The Lost Symbol");
book1.setAuthor("Dan Brown");
book1.setPage(510);
book1.setPrice(19.95);
book1.setPress("Unknow");
book1.save();
book1.setPrice(10.99);
book1.save();
法二:
Book book2=new Book();
book2.setPrice(14.95);
book2.setPress("Anchor");
book2.updateAll("name = ? and author = ?","The Lost Symbol","Dan Brown");
法三,把数据更新为默认值:
Book book=new Book();
book.setToDefault("page");
book.updateAll();
这样即把所有书的页数都更新为0。
五 LitePal删除数据
DataSupport.deleteAll(Book.class,"price < ?","15");
六 LitePal查询数据
List<Book> books=DataSupport.findAll(Book.class);
for(Book book:books){
Log.i(book.getName()+"**"+book.getAuthor()+"**"+book.getPrice()+"**"+book.getPage());
}
其他查询语句:
1.查询第一条或最后一条数据:
//查询第一条数据
Book book=DataSupport.findFirst(Book.class);
//查询最后一条数据
Book book1=DataSupport.findLast(Book.class);
2.连缀查询定制更多功能的查询
//select()方法指定查询,如:仅查询书名和作者这两列
List<Book> books=DataSupport.select("name","author").find(Book.class);
//where()方法指定查询条件,如:查询页数小于400的
List<Book> books1=DataSupport.where("page < ?","400").find(Book.class);
//order()方法指定排序的结果,默认asc 升序排列
List<Book> books2=DataSupport.order("price desc").find(Book.class);
//limit()方法指定查询结果的数量,如:只查表中的前3条数据
List<Book> books3=DataSupport.limit(3).find(Book.class);
//offset()方法指定查询结果的偏移量,如查询表中的第2,3,4,条数据
List<Book> books4=DataSupport.limit(3).offset(1).find(Book.class);
//任意组合的连缀
List<Book> books5=DataSupport.select("name","author","page")
.where("page > ?","400")
.order("page desc")
.limit(10)
.offset(10)
.find(Book.class);
当然,LitePal还支持使用原生的SQL来进行查询,调用DataSupport.findBySQL()方法。
以上即介绍了LitePal的简单用法,相比较SQLite数据库,简化了代码的书写,很好用。