Android数据库之LitePal笔记

郭神博客传送门

一. 什么是LitePal?

LitePal是郭神写的开源Android数据库框架,采用了对象-关系映射(ORM),并对数据库常用操作进行了封装,Github地址是https://github.com/LitePalFramework/LitePal

二. 优点

  • 实现了ORM映射,不用自己对Cursor进行封装。
  • 简化了SQLiteDatabase的CURD操作。

三. 使用方法

1. 先进行各种配置

  • 添加依赖
compile 'org.litepal.android:core:1.5.1'//版本号以官方最新为准
  • 在assets(Project\app\src\main\assets)文件夹下(若没有该文件夹,手动添加),添加配置文件litepal.xml(用来配置数据库名、版本等信息)
<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--
        用来定义数据库名,应该以.db结束,但是可以不写,LitePal会自动添加
    -->
    <dbname value="demo" />

    <!--
        定义数据库版本号,每次升级数据库配置的时候应该将该值加1,初始版本为1
    -->
    <version value="1" />

    <!--
        在mapping子标签里定义要映射的类
        例如:
        <list>
            <mapping class="com.test.model.Reader" />
            <mapping class="com.test.model.Magazine" />
        </list>
    -->
    <list>
    </list>
    
    <!--
        定义数据库文件存放的位置,internal代表储存在内置存储,external代表储存在外部存储。可以不写,默认是internal。
        例如:
        <storage value="external" />
    -->
<storage value="internal" />
</litepal>
  • 配置application
<manifest>
    <application
        android:name="org.litepal.LitePalApplication"
        ...
    >
        ...
    </application>
</manifest>

如果已经配置过application,则在自己application的onCreate添加LitePal.initialize(this);

2. 配置完成,开始使用

  1. 新建数据库
    • 新建JavaBean
public class Demo {
    /*@Column注解可以为映射的列添加约束,共有四个值
    * nullable 是否为空约束
    * unique 唯一约束
    * ignore 映射的时候忽略的属性
    * defaultValue 默认值设置
    * */
    @Column(nullable = false,unique = true,ignore = false,defaultValue = "123")
    private String name;

    @Column(nullable = false ,defaultValue = "18")
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • 将bean添加到模型映射中
<list>
        <mapping class="bean1"/>
        <mapping class="bean2"/>
        <mapping class="bean3"/>
    </list>
  • 调用LitePal.getDatabase(),Lite Pal就会创建数据库
  1. 升级数据库
    • 升级的时候要是要加入新的Bean则添加映射,然后再将litepal.xml里面的版本号加1即可
    • 升级数据库过程数据不会丢失
  2. 添加数据
    • 将bean类继承自DataSupport
    • 实例化bean,设置参数,调用save()方法就可以将数据插入数据库了
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.save();
Song song1 = new Song();
song1.setName("song1");
song1.setDuration(320);
song1.setAlbum(album);
song1.save();
Song song2 = new Song();
song2.setName("song2");
song2.setDuration(356);
song2.setAlbum(album);
song2.save();
  1. 删除数据
    • delete(bean.class,rowId)方法(删除某张表中rowid对应的行)
DataSupport.delete(Song.class, id);
  • deleteAll(bean.class,String...conditions)方法(根据conditions条件删除表中的数据)
DataSupport.deleteAll(Song.class, "duration > ?" , "350");
  1. 修改(更新)数据
    • save()(找到已经存在的对象,然后重新设置属性,重新save)
Album albumToUpdate = DataSupport.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();
  • update(int rowId)(新建对象,设置要更改的属性,调用update方法,更新要更新的行)
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(id);
  • updateAll(bean.class,String... conditinos)(更新满足条件的行)
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "album");
  1. 查询数据
    • 通过find(bean.class,int rowId)查找指定行
Song song = DataSupport.find(Song.class, id);
  • 通过findAll(bean.class,long... ids)查找想要查找的行
List<Song> allSongs = DataSupport.findAll(Song.class);//查找所有行
List<Song> allSongs = DataSupport.findAll(Song.class,1,2,3);//查找前三行
  • 连缀查询
连缀查询
连缀查询续
  • 原生查询
Cursor cursor = DataSupport.findBySQL(String sql)

四. 更多操作

  • 分页操作:采用连缀查询,用limit限制每页展示的条数,用offset设置偏移量来查询需要的数据
/**
     * 分页查询
     * @param offset 偏移量,用来查询分页数据,刚开始offset为0,查询前20条,然后offset设置为20,就查询21-40的数据,以此类推
     * @return 查询到的数据List
     */
    public static List<User> queryPagingData(int offset){
        List<User> userList = DataSupport.select("name","age","gender")
                .where()
                .limit(20)
                .offset(offset)
                .find(User.class);
        return userList;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容