LitePal 开源数据库框架学习(跟随郭霖老师的学习)

在android studio中添加dependdencies{
compile‘org.litepal.android:core:1.3.2’

}

在app/src/main中添加assets文件夹,添加文件litepal.xml

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore"></dbname>
    <version value="1"></version>
    <list>
        <mapping class="test.ban.com.test_litepal.Book"></mapping>
    </list>
</litepal>

添加Book类

public class Book extends DataSupport{
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;

    public int getId() {
        return id;
    }

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

    public String getAuthor() {
        return author;
    }

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

    public double getPrice() {
        return price;
    }

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

    public int getPages() {
        return pages;
    }

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

    public String getName() {
        return name;
    }

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

记录类路径test.ban.com.test_litepal.Book

在Manifast中的application添加
android:name="org.litepal.LitePalApplication"
配置完成,编写主代码

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

即可使用创建完成
升级数据库,添加表单等,只需要增加版本号<version value="2"></version>,然后修改类中的字段即可

 private String press;

    public String getPress() {
        return press;
    }

    public void setPress(String press) {
        this.press = press;
    }

添加表:

public class Category {
    private int id;
    private String categoryName;
    private int categoryCode;

    public int getId() {
        return id;
    }

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

    public String getCategoryName() {
        return categoryName;
    }

    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }

    public int getCategoryCode() {
        return categoryCode;
    }

    public void setCategoryCode(int categoryCode) {
        this.categoryCode = categoryCode;
    }
}

在litepal中添加即可:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore"></dbname>
    <version value="3"></version>
    <list>
        <mapping class="test.ban.com.test_litepal.Book"></mapping>
        <mapping class="test.ban.com.test_litepal.Category"></mapping>
    </list>
</litepal>

插入数据也较为简单

Button addDate= (Button) findViewById(R.id.btn_insert_table);
        addDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Book book=new Book();
                book.setName("壁纸碧水");
                book.setAuthor("ban");
                book.setPages(432);
                book.setPress("aa");
                book.setPrice(321);
                book.save();
            }
        });

更新数据也较为简单,直接使用DateSupport接口中的方法即可

 //更新数据
        Button updateDate= (Button) findViewById(R.id.btn_update_table);
        updateDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Book book=new Book();
//                book.setName("小河在流血");
//                book.setAuthor("ban");
//                book.setPages(123);
//                book.setPress("标签");
//                book.setPrice(50);
//                book.save();
//                book.setPrice(20);
//                book.save();
                book.setPrice(15.66);
                book.setPress("快乐时");
                book.updateAll("name=? and author=?","小河在流血","ban");

            }
        });

但需要注意的是,此框架中是直接设置了默认值的,使用updateAll()方法(所有的数据更新),是不可以使用上面的方式来set的,就是不能讲数据设置为默认值,比如int类型的为0,所以Litepal提供了另一个setToDefault()方法,传入列名就可以实现了

Book book=new Book();
book.setToDefault("pages");
book.updateAll();

删除数据也较为简单,直接电筒DataSupport中的deleteAll()方法即可,再加上判断语句

Button deleteDate = (Button) findViewById(R.id.btn_delete_table);
        deleteDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DataSupport.deleteAll(Book.class, "price<?", "16");
            }
        });

直接执行deleteAll()方法不指定约束条件,则是将整个表的数据删除
查询,都是最麻烦的,使用Litepal就可以简化这一部分的内容查询所有数据:

List<Book> books = DataSupport.findAll(Book.class);
                for (Book book : books) {
                    Log.i(TAG, "name: " + book.getName());
                    Log.i(TAG, "price: " + book.getPrice());
                    Log.i(TAG, "author: " + book.getAuthor());
                    Log.i(TAG, "press: " + book.getPress());
                    Log.i(TAG, "pages: " + book.getPages());
                }

还有一些其他的方法

 //查询第一行
                Book firstBook = DataSupport.findFirst(Book.class);
                //查询最后一行
                Book lastBook = DataSupport.findLast(Book.class);

                List<Book> books = DataSupport.select("name", "author").find(Book.class);
//                for (Book book : books) {//没有查询出的值为空(默认值)
//                    Log.i(TAG, "name: " + book.getName());
//                    Log.i(TAG, "price: " + book.getPrice());
//                    Log.i(TAG, "author: " + book.getAuthor());
//                    Log.i(TAG, "press: " + book.getPress());
//                    Log.i(TAG, "pages: " + book.getPages());
//                }
                //倒序排列
                List<Book> books2 = DataSupport.order("price desc").find(Book.class);
                //限制
                List<Book> books3 = DataSupport.limit(3).offset(1).find(Book.class);
                //where 子句
                List<Book> books4 = DataSupport.where("pages>?", "10").find(Book.class);

若是想用原省的sql语句,也可以使用
Cursor c=DataSupport.findBySQL("select * from Book where pages > ? and price < ?","400","20");







 

猜你喜欢

转载自blog.csdn.net/u013377003/article/details/54948435