Android数据存储——开源LitePal方法操作数据库

一 配置litepal

1.在app/build.gradle中的dependencies闭包中添加依赖:

compile org.litepal.android:core:1.4.1

2.在app/src/mian目录里 new一个Directory,命名为assets目录,在目录中创建一个file,命名litepal.xml。并进行编辑:

1 <?xml version="1.0" encoding="utf-8" ?>
2 <litepal>
3     <dbname value="BookStore"></dbname>
4 
5     <version value="1"></version>
6     <list>
7 
8     </list>
9 </litepal>

dbname用于指定数据库名,version指定版本号。

3.配置LitePalApplication,修改AndroidMainActivity中的代码,在<application>中添加:

android:name="org.litepal.LitePalApplication"

 

二 创建和升级数据库

在litepal中采用的是对象关系映射模型,可以使用面向对象的思想来编写数据库,即把表映射成了对应的类,表中的列就是类中的数据类型,再给各种数据写上对应的get和set方法。

(1)创建数据库:

如先创建一个Book表,则创建book类。如下:

 1 public class Book {
 2 
 3     private int id;
 4     private String author;
 5     private double price;
 6     private int pages;
 7     private String name;
 8 
 9     public int getId() {
10         return id;
11     }
12 
13     public void setId(int id) {
14         this.id = id;
15     }
16 
17     public String getAuthor() {
18         return author;
19     }
20 
21     public void setAuthor(String author) {
22         this.author = author;
23     }
24 
25     public double getPrice() {
26         return price;
27     }
28 
29     public void setPrice(double price) {
30         this.price = price;
31     }
32 
33     public int getPages() {
34         return pages;
35     }
36 
37     public void setPages(int pages) {
38         this.pages = pages;
39     }
40 
41     public String getName() {
42         return name;
43     }
44 
45     public void setName(String name) {
46         this.name = name;
47     }
48 }

在Book类中我们定义了类中对应表中的各列的字段。这就是映射。

将Book类添加到映射模型列表中,修改litepal.xml中的代码如下:注意一定要写完整的类名。

    <list>
        <mapping class="com.example.litepaltest.Book"></mapping>
    </list>

现在只要进行任意一次数据库操作,数据库就会被创建,book表也会被创建,所以使用Litepal.getDatabase()方法来进行最简单的数据库操作,以达到创建数据库和表的目的。

(2)升级数据库:

之前使用SQliteOpenHelper来进行对数据库操作时,虽然也可以升级,但是每次升级会先删除之前存在的表,如果表中存有数据就会造成不必要的损失。而使用litepal则不会在更新时候删除之前存在的表和数据。

如我们在book表中新加一个列,只要在book类中新加入一个字段和相应的方法即可。代码如下:

1     private String press;
2 
3     public String getPress() {
4         return press;
5     }
6 
7     public void setPress(String press) {
8         this.press = press;
9     }

同时还可以加入一个新的表Category表来分类书籍。新建一个Category类,同样字段对应相应的行,如下:

 1 public class Category {
 2     private int id;
 3     private String categoryName;
 4     private int categoryCode;
 5 
 6     public int getId() {
 7         return id;
 8     }
 9 
10     public void setId(int id) {
11         this.id = id;
12     }
13 
14     public void setCategoryName(String categoryName) {
15         this.categoryName = categoryName;
16     }
17 
18     public void setCategoryCode(int categoryCode) {
19         this.categoryCode = categoryCode;
20     }
21 }

这时,只需要在litepal.xml中修改相应的版本号,并加入新添加的表的类名就可。(版本号增加为2)

1 <litepal>
2     <dbname value="BookStore"></dbname>
3 
4     <version value="2"></version>
5     <list>
6         <mapping class="com.example.litepaltest.Book"></mapping>
7         <mapping class="com.example.litepaltest.Category"></mapping>
8     </list>
9 </litepal>

 

三 添加数据

添加数据很简单,只需要将要添加的表继承自LitePalSupport类(原继承DataSupport类,现在已经弃用了)。

public class Book extends LitePalSupport

然后在MainActivity中添加相关要添加的数据,最后用save()进行保存即可。如下:

 1         Button addData = (Button) findViewById(R.id.add_data);
 2         addData.setOnClickListener(new View.OnClickListener() {
 3             @Override
 4             public void onClick(View view) {
 5                 Book book = new Book();
 6                 book.setName("the da wei");
 7                 book.setAuthor("mask");
 8                 book.setPages(33);
 9                 book.setPrice(19.33);
10                 book.setPress("Unkonw");
11                 book.save();
12             }
13         });

如上,先创建出一个Book的实例,然后调用Book类中的设置好的set方法设置数据,然后用save()方法来进行保存数据。

 

四 更新数据

我们修改表中一本书的价格和出版社,其中有限制条件作者和书名。代码如下:

 1         Button updateData = (Button) findViewById(R.id.update_data);
 2         updateData.setOnClickListener(new View.OnClickListener() {
 3             @Override
 4             public void onClick(View view) {
 5                 Book book = new Book();
 6                 book.setPrice(14.99);
 7                 book.setPress("Auchor");
 8                 book.updateAll("name=? and author=?", "the a", "maskd");
 9             }
10         });

先将表实例化,然后通过set修改要更新的数据,通过updateAll()方法来更新,其中第一个参数是限制的条件,之后是限制条件具体的参数。如果不指定条件语句的话,表示所有的数据都更新。

如果想将列的内容更新为默认值的话,使用如下代码:就可以将目标列中的值设为默认值了。

book.setToDefault("pages");

 

五 删除数据

删除数据假设还是继承自datasupport类:代码如下

1         Button deleteButton = (Button) findViewById(R.id.delete_data);
2         deleteButton.setOnClickListener(new View.OnClickListener() {
3             @Override
4             public void onClick(View view) {6                 DataSupport.deleteAll(Book.class,"price<?","12.00");
7             }
8         });

其中删除删除deleteAll方法第一个参数是对应的表,第二个和第三个参数相当于SQL语句中的where和对应的数值。

 

Android数据存储——开源LitePal方法操作数据库

上一篇:Android进程间通信-AIDL实现原理


下一篇:洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication(最小割)