LitePal框架
LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作。
LitePal项目主页详细使用文档的地址:https://github.com/guolindev/LitePal
配置LitePal:
打开app/build.gradle文件,在dependencies闭包中添加代码:
implementation ‘org.litepal.android:core:1.4.1‘
将LitePal导入当前的Android项目,然后配置litepal.xml文件,在app/src/main目录下新建文件夹assets,然后在assets文件夹中新建litepal.zml文件,配置文件内容:
<?xml version="1.0" encoding="utf-8" ?> <litepal> <dbname value = "BookStore"></dbname> <version value = "1"></version> <list> <mapping class="com.example.litepaltest.Book"></mapping> <mapping class="com.example.litepaltest.Category"></mapping> </list> </litepal>
<dbname>标签用于指定数据库名称,<version>用于指定数据库版本号,当新添加了表要更新数据库时将version中的value值加一就可以了。<list>标签用于指定所有的映射模型,每个映射模型用<mapping>标签声明,class指定映射模型类名(完整类名),Book 和 Category 为一个模型类的名字,类中定义的变量对应着数据库表中的列。
最后将项目的application配置为org.litepal.LitePalApplication,修改AndroidManifest.xml中的代码:
android:name=” org.litepal.LitePalApplication”
Book类代码:
public class Book{ 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; } }
Category 类的代码结构与Book类类似就不展示了。
创建数据库:
LitePal.getDatabase();
升级数据库:如果要新增表,就要先将对应的映射添加到litepal.xml中<list>标签中,如果只是改了已创建表中的数据就直接将<version>中的版本加一,再运行程序调用LitePal.getDatabase();语句就可以了。
<?xml version="1.0" encoding="utf-8" ?> <litepal> <dbname value = "BookStore"></dbname> <version value = "2"></version> <list> <mapping class="com.example.litepaltest.Book"></mapping> <mapping class="com.example.litepaltest.Category"></mapping> <mapping class="com.example.litepaltest.Person"></mapping> </list> </litepal>
添加数据:添加数据需要模型类继承DataSupport类,然后创建要添加数据的表对应的模型类实例,用set方法对模型类中的数据进行设置,最后调用save()方法就可以将数据添加到数据库表中了,save()方法就是模型类从DataSupport类中继承的。
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.save();
更新数据:
对已添加存储在数据库表中的数据对象进行更新(调用了save()方法),重新设置该对象的值然后再调用一次sava()方法,这个方法很简单,但是局限性很大,只能在该对象可作用范围内使用。
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.save(); book.setPrice(19.96); book.save();
另一种是设置条件,将数据库中符合条件的数据进行更改,先创建一个要修改数据的表对应的模型类实例,然后使用set方法设置要修改的数据,最后调用updataAll()方法,updataAll()方法中可以指定一个约束条件,如果不指定则更新所有数据。
Book book = new Book(); book.setPrice(14.95); book.setPress("Anchor"); book.updateAll("name = ? and author = ?","The Lost Symbol","Dan Brown");
删除数据:调用DataSupport.deleteAll()方法来删除数据,第一个参数用于指定删除那张表中的数据(对应的模型类),后面的参数用于指定约束条件和updataAll()方法一样。
DataSupport.deleteAll(Book.class,"price < ?","15");
查询数据:使用DataSupport中的方法进行查询,这些方法查询所返回的对象为所查询的表对应的模型类对象或对象列表,当只有一条查询数据时只需要创建一个对象接收,如果返回多条查询数据时需要用该对象列表接收。
查询表中所有数据:
List<Book> books = DataSupport.findAll(Book.class);
查询表中第一条数据:
Book book = DataSupport.findFirst(Book.class);
查询表中最后一条数据:
Book book = DataSupport.findLast(Book.class);
select()指定查询的列:
List<Book> books = DataSupport.select(“name”,”author”).find(Book.class);
where()指定查询的约束条件:
List<Book> books = DataSupport.where(“pages > ?”,”400”).find(Book.class);
order()指定结果的排序方式,desc表示降序排列,asc或者不写表示升序排列:
List<Book> books = DataSupport.order(“price desc”).find(Book.class);
limit()指定查询结果的数量,从前往后数:
List<Book> books = DataSupport.limit(3).find(Book.class);
offset()指定查询结果的偏移量,从偏移量的地方开始往后查询:
List<Book> books = DataSupport.offset(2).find(Book.class);
在需要的时候可以将select()、where()、order()、limit()、offset()这5个方法连缀组合进行查询,例如查询Book表中第3~7条满足页数大于400这个条件的name、author 和 price这3列数据,并将查询结果按照页数升序排列:
List<Book> books = DataSupport.select("name","author","price") .where("pages > ?","400") .order("pages") .limit(5) .offset(2) .find(Book.class);
如果实在想用SQL语句查询也可以,不过这个返回的是一个Cursor对象。
Cursor c = DataSupport.findBySQL(“select * from Book where pages > ? and price < ?”,"400","20");