二话不说,先吹一波LitePal。LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)模式,并将我们平时开发常用的一些数据库功能进行封装,使得不用编写一行SQL语句就可以 完成各种建表和增删查改操作。我们使用的编译语言是面向对象语言,使用的数据库则是关系数据库,那么面向对象的语言和面向关系的数据库之间建立一种映射关系,它使得我们用面向对象的思维来操作数据库,不用和SQL语句打交道。操作简单就够了吗?不仅如此,SQLiteDatabace操作数据库,进行版本更新的时候,会清除掉旧数据,但是LitePal会保留旧数据,这样就不用担心数据的丢失。
由于LitePal是一个开源库,所以想要使用LitePal,第一步是在app/build.gradle文件中声明该开源库的引用。在app/build.gradle文件中的dependencies闭包中添加如下内容,其中1.3.2是版本号:
implementation 'org.litepal.android:core:1.3.2'
接下来需要配置litepal.xml文件。右击app/src/main目录->New->Directory,创建一个assets目录,在后再该目录下新建一个litepal.xml文件,并编辑内容如下,其中标签用于指定所有的映射模型:
最后还要配置LitePalApplication,修改AndroidManifest.xml中的代码,在
至此,配置完毕。
在进入正式操作之前,我们需要了解我们在Android studio中无法查看创建的数据库表格,所以需要adb shell来对数据库和表的操作情况进行检查,保证操作成功。如何操作请点击“adb”。
首先创建一个Book类,代码如下:
public class Book extends DataSupport {
private int id;
private String author;
private double price;
private int pages;
private String name;
private String press;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
}
然后修改litepal.xml中的代码,在标签中加入:
不管需要映射多少模型类,同样的方式加入到中即可。
创建代码如下:
Connector.getDatabase();
升级数据库:
当在修改已经创建好的数据表的属性或者添加新的表格时,需要升级数据库,Litepal只需要修改litepal.xml中的代码就可以完成审升级数据库操作,如需要将版本升级到2,只需要执行下述代码:
1.增添数据:
Book book = new Book();
book.setName("The Da Vinci Code");
book.setAuthor("Dan Brown");
book.setPages(454);
book.setPrice(16.96);
book.setPress("Unknow");
//Book类继承的DataSupport类中的方法
book.save();
2.更新数据:
Book book = new Book();
book.setPrice(14.95);
book.setPress("Anchor");
book.updateAll("name = ? and author = ?", "The Lost Symbol", "Dan Brown");
现在有个问题,book对象的其他属性没有赋值,是默认值(比如int默认值为0,string默认值为null),会把符合条件行的其他属性变成默认值吗?并不会,这里的updateAll()方法并不会更新默认值。那如何更新为默认值,代码如下:
Book book = new Book();
book.setToDefault("pages");
book.updateAll();
3.删除数据:
DataSupport.deleteAll(Book.class, "price < ?", "15");
4.查询数据:
//直接查询所有数据
List books = DataSupport.findAll(Book.class);
//条件查找
//需要什么属性添加什么方法,不需要不添加即可
//select用与指定查询哪几列的数据
//where用于指定查询的约束条件
//order用于指定排序方式
//limit用于指定查询结果的数量
//offset用于指定查询结果的偏移量
//这段代码表示的是查询Book表中第11~20条满足页数大于400这个条件的name、author和pages这三列数据,并且查询结果按照页数升序排列
List books = DataSupport.select("name", "author", "pages")
.where("pages > ?", "400")
.order("pages")
.limit(10)
.offset(10)
.find(Book.class);
//查询表的第一条数据
Book books = DataSupport.findFirst(Book.class);
//查询表的最后一条数据
Book books = DataSupport.findLast(Book.class);
食用愉快。