天天看點

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"?>
<litepal>
    <dbname value="BookStore"/>
    <version value="1"/>
    <list>
        <mapping class="com.example.administrator.litepaldemo.BookStoreBeen"/>
    </list>
</litepal>      

     其中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"?>
<litepal>
    <dbname value="BookStore"/>
    <version value="2"/>
    <list>
        <mapping class="com.example.administrator.litepaldemo.BookStoreBeen"/>
        <mapping class="com.example.administrator.litepaldemo.PersonBeen"/>
    </list>
</litepal>      

      其中隻要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<BookStoreBeen> all = DataSupport.findAll(BookStoreBeen.class);
    }
});      

      查詢表中的所有資料,這些資料直接就封裝在了list中,不需要在通過Cursor了,很友善

     下面是以下查詢的别的語句:

     查詢第一條資料

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

    查詢最後一條

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

    如查詢name和autor這兩列的資料

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

    如查找頁數大于50的資料

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

      如按照書價從高到低排序

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

     從低到高排序,将desc換成asc

     如從表中查前3條資料

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

    如查詢第2,3,4條資料

List<BookStoreBeen> 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");      

繼續閱讀