LitePal 使用方法

LitePal

Android开源数据库框架

资料

Github

配置

导入

  • 配置模组的 build.gradle
compile 'org.litepal.android:core:1.5.0'

配置文件

  • assets 目录创建 litepal.xml
<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="demo" />
    <version value="1" />
    <list>
      <mapping class="com.test.model.Reader" />
      <mapping class="com.test.model.Magazine" />
    </list>
    <storage value="external" />
</litepal>
  • dbname 定义数据库名。默认以 .db 结尾,如未以此结尾,则自动添加。
  • version 定义数据库版本。辅助升级数据库。
  • list 根据标签 mapping 对应的类创建表,成员变量对应字段。
  • storage 定义数据库文件存储的地方,可选 internal 和 external, 默认为 internal

基本用法

初始化

  • 在自定义的Application中初始化
LitePal.initialize(this);
  • 或者使用LitePal库的Application
<manifest>
    <application
        android:name="org.litepal.LitePalApplication"
        ...
    >
    ...
    </application>
</manifest>

建表

  • 定义 Bean,继承 DataSupport
  • id字段可写可不写,默认自动产生
public class Album extends DataSupport {

    @Column(unique = true, defaultValue = "unknown")  // 唯一,默认值
    private String name;

    private float price;

    private byte[] cover;

    private List<Song> songs = new ArrayList<Song>(); // 关系:对多

    // getters/setters
}

public class Song extends DataSupport {

    @Column(nullable = false) // 非空
    private String name;

    private int duration;

    @Column(ignore = true)  // 忽略
    private String uselessField;

    private Album album; // 关系:对一

    // getters/setters
}
  • 修改 litepal.xml
<list>
    <mapping class="org.litepal.litepalsample.model.Album" />
    <mapping class="org.litepal.litepalsample.model.Song" />
</list>
  • 获取数据库
SQLiteDatabase db = LitePal.getDatabase();
  • 对应的SQL语句
CREATE TABLE album (
    id integer primary key autoincrement,
    name text unique default 'unknown',
    price real,
    cover blob
);

CREATE TABLE song (
    id integer primary key autoincrement,
    name text not null,
    duration integer,
    album_id integer
);

关系

  • 定义Bean时定义成员变量,即在建表时自动创建外键
  • 对一,成员变量为另一个Bean
  • 对多,成员变量为另一个Bean的集合
  • 多对多,两个Bean互相定义成员变量为另一Bean的集合
  • 数据表删除操作时,自动按外键进行删除

升级

  • 修改 Bean
public class Album extends DataSupport {

    @Column(unique = true, defaultValue = "unknown")
    private String name;

    @Column(ignore = true)
    private float price;

    private byte[] cover;

    private Date releaseDate;

    private List<Song> songs = new ArrayList<Song>();

    // getters/setters
}
  • 修改 litepal.xml

版本号增加,数据自动保存

<version value="2" />
  • 丢失数据状况
    • 注解成员变量unique = true
    • 改变注解unique = true
    • 改变注解nullable = false

增加

  • DataSupport:saveAll
  • Bean:save/saveThrows/saveOrUpdate
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();

修改

  • DataSupport:update/updateAll
  • Bean:update/updateAll/setToDefault/assignBaseObjId
Album albumToUpdate = DataSupport.find(Album.class, 1); //查找
albumToUpdate.setPrice(20.99f);
albumToUpdate.save(); // 保存

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f);
albumToUpdate.update(id); // 更新

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f);
albumToUpdate.updateAll("name = ?", "album"); // 更新所有

Album albumToUpdate = new Album();
albumToUpdate.setToDefault("name"); // 更新为默认值
albumToUpdate.updateAll();

删除

  • DataSupport:delete/deleteAll/markAsDeleted
  • Bean:delete/clearSavedState
  • Bean必须是已持久化的对象,否则无效
DataSupport.delete(Song.class, id); // 删除
DataSupport.delete(Song.class); // 删除所有数据
DataSupport.deleteAll(Song.class, "duration > ?" , "350"); // 条件删除

查询

  • DataSupport:find/findFirst/findLast/findAll/findBySQL/isExist
  • DataSupport:select/where/order/limit/offset 查询条件
  • Bean:isSaved
Song song = DataSupport.find(Song.class, id);
Song song = DataSupport.findFirst(Song.class); // 查询第一条
Song song = DataSupport.findLast(Song.class); // 查询最后一条

List<Song> allSongs = DataSupport.findAll(Song.class);
List<Song> songs = DataSupport.where("name like ?", "song%").order("duration").find(Song.class);
List<Song> songs = DataSupport.where("name like ?", "song%").order("duration").limit(3).offset(1).find(Song.class); // 分页查询

 // 联合查询,可以查询关联表
Album album = DataSupport.find(Album.class, id, true);
List<Song> songs = album.getSongs();

异步

  • 大部分方法都有对应的异步方法
  • 如果不需要返回接.listen(null)
// 查询
DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
    @Override
    public <T> void onFinish(List<T> t) {
        List<Song> allSongs = (List<Song>) t;
    }
});

// 增加
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.saveAsync().listen(new SaveCallback() {
    @Override
    public void onFinish(boolean success) {

    }
});

聚合函数

count/average/max/min/sum

int result = DataSupport.count(Song.class);
int result = DataSupport.where("name like ?", "song%").count(Song.class);

double result = DataSupport.sum(Album.class, "price", double.class);

多库

LitePalDB litePalDB = new LitePalDB("demo2", 1);
litePalDB.addClassName(Singer.class.getName());
litePalDB.addClassName(Album.class.getName());
litePalDB.addClassName(Song.class.getName());
LitePal.use(litePalDB); // 建库

LitePalDB litePalDB = LitePalDB.fromDefault("newdb");
LitePal.use(litePalDB); // 使用 litepal.xml 创建一个新库

LitePal.useDefault(); // 返回默认库

LitePal.deleteDatabase("newdb"); // 删库
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值