LitePal---Android数据库框架

一。配置LitePal

在Github上搜索这个开源项目,找到在gradle中添加的语句

compile 'org.litepal.android:core:1.4.1'

1.4.1是我现在的最新版本。

添加后需要配置litepal.xml:

在src/main目录下创建一个assets目录,在此目录下创建一个litepal.xml文件,对此文件进行编辑。

<?xml version="1.0" encoding="utf-8" ?>
<litepal>
    <dbname value="GameStore"></dbname>
    <version value="1"></version>

    <list>
        
    </list>
</litepal>

注意:此处要创建xml文件需要在assets目录下New一个File,命名为litepal.xml

<daname>表示数据库的名称,<vewsoin>表示版本号,<list>用于指定所有的映射模型

接下来需要配置AndroidManifest.xml文件:

    <application
        android:name="org.litepal.LitePalApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
在application中加入android:name=“”的代码。

配置结束。

二。创建数据库

1.建立一个java.bean

public class Game {

    private int id;
    private String author;
    private String name;
    private double price;
    private boolean like;

    public boolean isLike() {
        return like;
    }

    public void setLike(boolean like) {
        this.like = like;
    }

    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 String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

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

}

2.修改litepal.xml文件,在<list>标签里加入下面语句:

    <list>
        <mapping class = "com.firstcode.firstcode2.chapter6.SQLiteTest.LitePalPackage.Game"></mapping>
    </list>

映射到java.bean文件。

3.运行创建数据库

在需要创建数据库地方使用:

Connector.getDatabase();
即可创建一个数据库。

三。升级数据库

需求:在Game表中添加一个字段press,并创建一个新的表格:Categroy

1.添加字段press只需要在Game的Bean文件中加一个成员变量即可

    //新增字段,出版社
    private String press;

    public String getPress() {
        return press;
    }

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

2.新建表格只需新创建一个Categroy的Bean类即可:

public class Categroy {

    private int id;
    private String categroyName;
    private int categroyCode;

    public int getId() {
        return id;
    }

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

    public String getCategroyName() {
        return categroyName;
    }

    public void setCategroyName(String categroyName) {
        this.categroyName = categroyName;
    }

    public int getCategroyCode() {
        return categroyCode;
    }

    public void setCategroyCode(int categroyCode) {
        this.categroyCode = categroyCode;
    }
}

3.在litepal.xml文件里声明这个Bean

    <list>
        <mapping class = "com.firstcode.firstcode2.chapter6.SQLiteTest.LitePalPackage.Game"></mapping>
        <mapping class = "com.firstcode.firstcode2.chapter6.SQLiteTest.LitePalPackage.Categroy"></mapping>
    </list>

4.执行命令也没有变,直接是

Connector.getDatabase();

用Listepal的好处是,在更新数据库的时候,不会造成数据丢失。

四。使用LitePal添加数据

只需创建的模型类的实例,再讲所有要存储的数据设置好,最后调用一下save()方法即可。

1.把需要用到的Bean类继承DataSupport:

public class Game extends DataSupport{

2.想Game表中添加数据:

                Game game = new Game();
                game.setName("WOW");
                game.setAuthor("BoLiZha");
                game.setPress("Press:BoLiZha");
                game.setPrice(60.0);
                game.setLike(true);
                game.save();

只需要向Bean中set数据即可,最后调用save()方法。

3.如果需要连续添加多条记录,需要在每个save()方法后加入clearSaveState()方法:

                Game game = new Game();
                game.setName("WOW");
                game.setAuthor("BoLiZha");
                game.setPress("Press:BoLiZha");
                game.setPrice(60.0);
                game.setLike(true);
                game.save();
                game.clearSavedState();
                game.setName("WOT");
                game.setAuthor("LaoMaoZi");
                game.setPress("Press:KongZhongWang");
                game.setPrice(36.0);
                game.setLike(true);
                game.save();
                game.clearSavedState();
                game.setName("LOL");
                game.setAuthor("QuanTou");
                game.setPress("Press:QiEr");
                game.setPrice(0.0);
                game.setLike(true);
                game.save();

五。使用LitePal更新数据:

在LitePal中,对已经存储过的数据才能进行更新,也就是说只能对model.isSaved()如果返回true才能更新。

在以下两种情况会返回true,第一种是:已经调用过model.save()的数据,另一种是通过LitePal提供的AIP在数据库中查询到的数据。

1.第一种情况:

                game.setName("CrossFire");
                game.setAuthor("LaJi");
                game.setPress("Press:QiEr");
                game.setPrice(0.0);
                game.setLike(true);
                game.save();
                game.setPrice(1000000.0);
                game.setLike(false);
                game.save();
就是对已经存储的数据进行再次更新再存储。

2.第二种情况

                game.setPrice(2000000.0);
                game.setAuthor("LaJiZhongDeZhanDouJi");
                game.updateAll("name = ? and author = ?", "CrossFire", "LaJi");

updateAll()方法可以指定一个约束条件,和SQL语句里面的where相类似。

注意:在updateAll()方法使用时,如果想要指定字段的默认值的话,不能用Bean 的set方法,这样做的话是不会更新的,因为在java中,所有字段都是有默认值的,例如一个int类型的page默认值是0,如果直接set(0)的话,这样即使更新之后,这个语句也不能运行。需要用LitePal提供的setToDefault()方法。

如果在updateAll()方法使用时,没有指定约束条件,则是对所有数据进行更新,例如:

                game.setToDefault("price");
                game.updateAll();

这两行的意思就是把所有条目的price字段置为默认值。

3.指定id进行更新数据:

                game.update(3);

六。使用LitePal删除数据:

删除的方法和更新的方法类似,也是两种,一种是直接对已经存储(调用过save()的对象或者是通过LitePal的AIP查找出来的)的对象delete()。

另一种:

1.有条件的删除

                DataSupport.deleteAll(Game.class, "price > ?", "1000000.0");
2.指定id删除

                DataSupport.delete(Game.class, 3);
七。使用LitePal查询数据:

查询的方法也并不复杂:

                List<Game> games = DataSupport.findAll(Game.class);
                for (Game game1 : games) {
                    Log.e("LitePalTest", game1.getName());
                    Log.e("LitePalTest", game1.getAuthor());
                    Log.e("LitePalTest", game1.getPress());
                    Log.e("LitePalTest", game1.getPrice() + "");
                    Log.e("LitePalTest", game1.isLike() + "");
                }
只需要用DataSupport的findAll()方法查找,然后在对这个对象进行遍历拿到数据就可。

findFirst()和findLast()则是可以查询数据库的首项和尾项:

                Game gameFirst = DataSupport.findFirst(Game.class);
                Log.e("gameFirst", gameFirst.getName());
                Log.e("gameFirst", gameFirst.getAuthor());
                Log.e("gameFirst", gameFirst.getPress());
                Log.e("gameFirst", gameFirst.getPrice() + "");
                Log.e("gameFirst", gameFirst.isLike() + "");

                Game gameLast = DataSupport.findLast(Game.class);
                Log.e("gameLast", gameLast.getName());
                Log.e("gameLast", gameLast.getAuthor());
                Log.e("gameLast", gameLast.getPress());
                Log.e("gameLast", gameLast.getPrice() + "");
                Log.e("gameLast", gameLast.isLike() + "");
select()方法可以和find()一起使用,根据关键字查找特定数据,这里值查找name和author这两项数据:

                List<Game> games = DataSupport.select("name", "author").find(Game.class);
                for (Game game1 : games) {
                    Log.e("LitePalTest", game1.getName());
                    Log.e("LitePalTest", game1.getAuthor());
                }
where()方法可以指定查询的约束条件,这里查询price大于40的数据:

                List<Game> games = DataSupport.where("price > ?", "40").find(Game.class);
                for (Game game1 : games) {
                    Log.e("LitePalTest", game1.getName());
                    Log.e("LitePalTest", game1.getAuthor());
                    Log.e("LitePalTest", game1.getPress());
                    Log.e("LitePalTest", game1.getPrice() + "");
                    Log.e("LitePalTest", game1.isLike() + "");
                }
order()方法可以为查询到的数据进行排序,desc是降序,asc是升序,这里查询到的数据根据price的降序排列:

                List<Game> games = DataSupport.order("price desc").find(Game.class);
                for (Game game1 : games) {
                    Log.e("LitePalTest", game1.getName());
                    Log.e("LitePalTest", game1.getAuthor());
                    Log.e("LitePalTest", game1.getPress());
                    Log.e("LitePalTest", game1.getPrice() + "");
                    Log.e("LitePalTest", game1.isLike() + "");
                }
limit()方法可以查询到数据库的前几列数据:

                List<Game> games = DataSupport.limit(2).find(Game.class);
                for (Game game1 : games) {
                    Log.e("LitePalTest", game1.getName());
                    Log.e("LitePalTest", game1.getAuthor());
                    Log.e("LitePalTest", game1.getPress());
                    Log.e("LitePalTest", game1.getPrice() + "");
                    Log.e("LitePalTest", game1.isLike() + "");
                }
offset()方法可以指定从什么位置进行查询,结合limit()方法,例如:

                List<Game> games = DataSupport.limit(2).offset(1).find(Game.class);
                for (Game game1 : games) {
                    Log.e("LitePalTest", game1.getName());
                    Log.e("LitePalTest", game1.getAuthor());
                    Log.e("LitePalTest", game1.getPress());
                    Log.e("LitePalTest", game1.getPrice() + "");
                    Log.e("LitePalTest", game1.isLike() + "");
                }
这个方法则是查询数据库的前两项数据,从第二个条目开始查询。

上面几个方法可以进行连缀组合。


当然LitePal也支持老式的SQL语句,但是LitePal正是要进行简化操作的。所以...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值