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

志不强者智不达,言不信者行不果。这篇文章主要讲述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="https://www.songbingjia.com/android/BookStore"> < /dbname> 4 5< version value="https://www.songbingjia.com/android/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 3private int id; 4private String author; 5private double price; 6private int pages; 7private String name; 8 9public int getId() { 10return id; 11} 12 13public void setId(int id) { 14this.id = id; 15} 16 17public String getAuthor() { 18return author; 19} 20 21public void setAuthor(String author) { 22this.author = author; 23} 24 25public double getPrice() { 26return price; 27} 28 29public void setPrice(double price) { 30this.price = price; 31} 32 33public int getPages() { 34return pages; 35} 36 37public void setPages(int pages) { 38this.pages = pages; 39} 40 41public String getName() { 42return name; 43} 44 45public void setName(String name) { 46this.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类中新加入一个字段和相应的方法即可。代码如下:
1private String press; 2 3public String getPress() { 4return press; 5} 6 7public void setPress(String press) { 8this.press = press; 9}

同时还可以加入一个新的表Category表来分类书籍。新建一个Category类,同样字段对应相应的行,如下:
1 public class Category { 2private int id; 3private String categoryName; 4private int categoryCode; 5 6public int getId() { 7return id; 8} 9 10public void setId(int id) { 11this.id = id; 12} 13 14public void setCategoryName(String categoryName) { 15this.categoryName = categoryName; 16} 17 18public void setCategoryCode(int categoryCode) { 19this.categoryCode = categoryCode; 20} 21 }

【Android数据存储——开源LitePal方法操作数据库】这时,只需要在litepal.xml中修改相应的版本号,并加入新添加的表的类名就可。(版本号增加为2)
1 < litepal> 2< dbname value="https://www.songbingjia.com/android/BookStore"> < /dbname> 3 4< version value="https://www.songbingjia.com/android/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()进行保存即可。如下:
1Button addData = https://www.songbingjia.com/android/(Button) findViewById(R.id.add_data); 2addData.setOnClickListener(new View.OnClickListener() { 3@Override 4public void onClick(View view) { 5Book book = new Book(); 6book.setName("the da wei"); 7book.setAuthor("mask"); 8book.setPages(33); 9book.setPrice(19.33); 10book.setPress("Unkonw"); 11book.save(); 12} 13});

如上,先创建出一个Book的实例,然后调用Book类中的设置好的set方法设置数据,然后用save()方法来进行保存数据。
 
四 更新数据
我们修改表中一本书的价格和出版社,其中有限制条件作者和书名。代码如下:
1Button updateData = https://www.songbingjia.com/android/(Button) findViewById(R.id.update_data); 2updateData.setOnClickListener(new View.OnClickListener() { 3@Override 4public void onClick(View view) { 5Book book = new Book(); 6book.setPrice(14.99); 7book.setPress("Auchor"); 8book.updateAll("name=? and author=?", "the a", "maskd"); 9} 10});

先将表实例化,然后通过set修改要更新的数据,通过updateAll()方法来更新,其中第一个参数是限制的条件,之后是限制条件具体的参数。如果不指定条件语句的话,表示所有的数据都更新。
如果想将列的内容更新为默认值的话,使用如下代码:就可以将目标列中的值设为默认值了。
book.setToDefault("pages");

 
五 删除数据
删除数据假设还是继承自datasupport类:代码如下
1Button deleteButton = (Button) findViewById(R.id.delete_data); 2deleteButton.setOnClickListener(new View.OnClickListener() { 3@Override 4public void onClick(View view) {6DataSupport.deleteAll(Book.class,"price< ?","12.00"); 7} 8});

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

    推荐阅读