一 配置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和对应的数值。