Android—数据库操作之LitePal

此篇为个人学习所用。

LitePal是一个开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平常所用到的一些数据库功能进行了封装,使得不用编写一行SQL语句,就可以完成各种建表和增删改查的操作。
其开源地址:https://github.com/LitePalFramework/LitePal
具体接受和用法,我们可以访问以上链接查看。

LitePal配置

目前,我们要在android项目上即成开源库的话也是相当简单,大多数的开源项目都会提交到jcenter上,我们只需要在app/build.gradle文件中声明该开源库的引用就可以。

implementation 'org.litepal.android:java:3.0.0'

然后配置litepal.xml文件(在app/src/main目录下新建一个litepal.xml文件),并编辑内容为:





//数据库名称
     
// 数据库版本
     

//用于指定所有的映射模型
    
    

同时修改AndroidManifest.xml文件中的内容,
下增加内容

   android:name="org.litepal.LitePalApplication"

到此,所有的LitePal的配置工作都已经结束了。

数据库创建与升级

我们还拿上篇的一个例子。定义一个类Book类,继承自LitePalSupport,声明一些属性,并实现其getter和setter方法。

public class Book  extends LitePalSupport{

    private int id;

    private String auther;
。。。。。。

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

    public void setAuther(String auther) {
        this.auther = auther;
    }
。。。。。。
    public int getId() {
        return id;
    }

    public String getAuther() {
        return auther;
    }
。。。。。。
}

其实Book类就对应一个Java bean。其实Book类就对应数据库当中的Book表。
然后我们修改litepal.xml文件,在list标签下增加:

    
        

    

这里使用来声明我们要配置的映射模型类,注意一定要是完成的类名,不管有多少的模型类需要映射都适用同样的方式配置在list标签下即可。现在只要进行任何一次数据库相关的操作,BookStore.db数据库就会自动的创建出来。

然后触发一个事件调用Connector.getDatabase()方法,该方法就是一次简单的数据库操作,执行这个方法之后 BookStore数据库就创建完成了。

数据库的升级

如果数据库不能满足我们的需要了,需要作出改进。例如:Book类需要增加字段,或者需要增加一张别的表,在这里假设我们要增加一张Category的表。该怎么升级呢?
步骤很简单:
1、在Book类中增加相应的字段,创建类似于Book的Category类。
2、修改litepal.xml文件内容,将version表示的版本增加,list中添加映射关系。




     
     
    
        
        
    


使用LitePal实现数据库的增 删 改 查

其具体实现逻辑在此不作过多的叙述,直接看实现代码吧。

        //增加数据
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Book book = new Book();

                book.setName("C语言");
                book.setAuther("Json");
                book.setPages(330);
                book.setPrice(39.9);
                book.setPress("北京人民教育出版社");

                book.save();//添加一条数据

                /*
                * 同一个bean存过一次后再存就会存储失败
                * */

                //对象是否存储过
                //Boolean isSave = book.isSaved();

                //book.saveAsync();//异步保存

                //book.saveThrows();
                //如果希望存储失败的话就抛出异常,而不是返回一个false,那就可以使用saveThrows()方法来代替。
                //使用saveThrows()方法来存储数据,一旦存储失败就会抛出一个DataSupportException异常,我们可以通过对这个异常进行捕获来处理存储失败的情况。

                //book.saveOrUpdate("name = ?" ,book.getName());//不存在就存储,已存在就更新的需求

            }
        });



        //更新数据的另一种方式
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                Book book = new Book();
                //在这里调用setPrice()和setPress()来设置要更新的数据
                //调用updateAll()方法来执行更新
                book.setPrice(14.95);

                book.setPress("Gagaga");

                book.updateAll("name = ? and auther = ?" ,"数据结构","Liu Gaojian");


                //如果我们想要把一个字段的值全部更新为默认值,可以使用一下方式
                book.setToDefault("price");
                book.updateAll();



                //第一步,查找id为1的记录
                Book book1 = LitePal.find(Book.class,1);

                //第二步,改变某个字段的值
                book1.setPages(300);

                //保存数据
                boolean isSaveSuccess= book1.save();

                if (isSaveSuccess){
                    //修改完成
                }else {
                    //修改失败
                }


                Book book2 = new Book();

                book2.setName("操作系统");

                //直接更新id为1的记录
                book2.update(1);

                boolean isSaveSu = book2.save();

                if (isSaveSuccess){
                    //修改完成
                }else {
                    //修改失败
                }



                Book book3 = new Book();

                book3.setPress("HHHHHHHH");

                //将所有name为C语言的数据,press全部改成HHHHHHHH
                book3.updateAll("name = ?","C语言");


                Book book4 = new Book();

                book4.setPress("HHHHHHHH");

                //将所有name为C语言的、pages为300数据,press全部改成HHHHHHHH
                book4.updateAll("name = ? and pages = ?","C语言","300");
                
            }
        });

        //删除数据数据
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //条件删除
                LitePal.deleteAll(Book.class,"price < ?","15");

                //返回值是int,表示删除了几条数据,返回0表示没有删除
                //int isdelect= LitePal.deleteAll(Book.class);
                
            }
        });



        //查询数据
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {



                //通过id查询
                Book book_ = LitePal.find(Book.class,1);


                //查询全部
                List books = LitePal.findAll(Book.class);

                for (Book book : books){

                    Log.d("GGGGGGG",book.getName().toString());

                }

                //根据姓名查找,并按照某字段排序
                List books_ = LitePal.where("name = ?","Liu gaojian").order("price").find(Book.class);

                for (Book book : books_){

                    Log.d("GGGGGGG",book.getName().toString());

                }

                
                //查price小于30
                List book_s_ = LitePal.where("price < ?","30").find(Book.class);
                for (Book book : book_s_){

                    Log.d("GGGGGGG",book.getName().toString());

                }
            }
        });

你可能感兴趣的:(Android—数据库操作之LitePal)