LitePal使用

一、使用LitePal相比SQLite的好处

      1、不是使用繁杂的SQLite语句,直接使用对象


      2、SQLite更新表,如添加先的表的时候,需要现将之前的表drop掉,这其实是个很严重的问题,之前表中保存的数据将被清理掉,而使用LitePal不会,更新表简单,更新后之前表保存的数据依然存在


二、LitePal的使用

        知道了它的好处,那接下来我们一起来学习它的而是用吧


      1、创建数据库

            先写一个Bean,这个是关于书的bean,如下:

public class BookStoreBeen  {
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;


    public void setId(int id){
        this.id = id;
    }
    public int getId(){
        return id;
    }


    public void setAuthor(String author){
        this.author = author;
    }
    public String getAuthor(){
        return author;
    }


    public void setPages(int pages){
        this.pages = pages;
    }
    public int getPages(){
        return pages;
    }


    public void setPrice(double price){
        this.price = price;
    }
    public double getPrice(){
        return price;
    }


    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
}

       然后在assets中创建litepal.xml,添加如下内容

xml version="1.0" encoding="utf-8"?>

    value="BookStore"/>
    value="1"/>
    
        class="com.example.administrator.litepaldemo.BookStoreBeen"/>
    

     其中dbname代表的是创建的数据的库名字,version代表的是数据库的版本,list表的就是要创建的数据库,class里面就是上面创建的been的地址


    准备条目做好了,接下来,开始创建数据库   

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Connector.getDatabase();
        }
    });
}

    通过DDMS将数据库导出,即可知道数据库创建成功


     2、添加数据,添加一条书库的信息

         先让之前的BookStoreBeen类继承DataSupport  ,如下:

 public class BookStoreBeen  extends DataSupport{

       开始添加:       

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        BookStoreBeen bookStoreBeen = new BookStoreBeen();
        bookStoreBeen.setName("王五");
        bookStoreBeen.setPrice(18.8);
        bookStoreBeen.setPages(16);
        bookStoreBeen.setAuthor("李四");
        bookStoreBeen.save();
    }
});
      添加很简单,new一个BookStoreBeen对象,将要保存的信息添加进去,最后调用save()方法,这个方法是继承DataSupport而来的,这样数据就添加成功了


    3、更新数据库

         需要再添加一张表Person,been类如下:

public class PersonBeen {
    private int id;
    private String sex;
    private int age;
    private String name;


    public void setId(int id){
        this.id = id;
    }
    public int getId(){
        return id;
    }


    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }


    public void setSex(String author){
        this.sex = author;
    }
    public String getSex(){
        return sex;
    }


    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return age;
    }
}

      更改litepal.xml内容如下:

xml version="1.0" encoding="utf-8"?>

    value="BookStore"/>
    value="2"/>
    
        class="com.example.administrator.litepaldemo.BookStoreBeen"/>
        class="com.example.administrator.litepaldemo.PersonBeen"/>
    
      其中只要version的值比之前大即可,这里更改为2,将PersonBeen的地址添加入list中


      开始更新数据库,同创建数据库:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Connector.getDatabase();
        }
    });
    
}

     再次导出数据库,发现多了一张表格,同时BookStoreBeen表中保存的数据依然存在,再这里就体现了,更新保存之前表的信息


     4、更新数据

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        BookStoreBeen bookStoreBeen = new BookStoreBeen();
        bookStoreBeen.setName("张三");
        bookStoreBeen.setPages(100);

        bookStoreBeen.updateAll("name = ? and pages = ?" , "王五" , "16");
    }
});
        先new一个BookStroeBeen对象,将要更新的数据重新赋值,然后调用updateAll()方法,这里的"name = ? and pages = ? "是更新的条件,"王五" , "16"分别的name是王五,pages是16,满足这两个条件的数据进行更新,注意,如果updateAll()中不传入参数,则代表数据中所有的信息都更新


     5、删除数据    

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        DataSupport.deleteAll(BookStoreBeen.class, "price < ?", "50");
    }
});
       第一个参数,告诉删除的是那种表的数据,第二个参数代表的是删除的条件,第三个参数是条件的值,这句话是说删除BooKStoreBeen数据库中价格小于50的所有的数据,注意,如果不deleteAll不传入约束条件,整个表的数据全部被删除


   6、查询数据  

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        List all = DataSupport.findAll(BookStoreBeen.class);
    }
});
      查询表中的所有数据,这些数据直接就封装在了list中,不需要在通过Cursor了,很方便

    

     下面是以下查询的别的语句:

     查询第一条数据

BookStoreBeen first = DataSupport.findFirst(BookStoreBeen.class);

    查询最后一条

BookStoreBeen last = DataSupport.findLast(BookStoreBeen.class);


    如查询name和autor这两列的数据

List bookStoreBeens = DataSupport.select("name", "author").find(BookStoreBeen.class);


    如查找页数大于50的数据

List bookStoreBeens = DataSupport.where("pages > ?", "50").find(BookStoreBeen.class);


      如按照书价从高到低排序

List bookStoreBeens = DataSupport.order("price desc").find(BookStoreBeen.class);

     从低到高排序,将desc换成asc


     如从表中查前3条数据

List bookStoreBeens = DataSupport.limit(3).find(BookStoreBeen.class);

    如查询第2,3,4条数据

List bookStoreBeens = DataSupport.limit(3).offset(1).find(BookStoreBeen.class);


  还可以对5个方法任意的连缀组合

DataSupport.select("name" , "author" , "pages").where("pages > ?" , "400").order("pages").limit(10).offset(10).find(BookStoreBeen.class);

如果上诉的api满足不了需求,也可以使用SQLite语句来进行查询

Cursor cursor = DataSupport.findBySQL("select * from Book where pages > ? and price < ?", "20", "50");



你可能感兴趣的:(LitePal使用)