数据库Android知识Android技术知识

LitePal 使用说明

2017-03-09  本文已影响2146人  雨林雨林

LitePal

Android开源数据库框架

资料

Github

设置

导入

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

配置

<?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>

初始化

LitePal.initialize(this);
<manifest>
    <application
        android:name="org.litepal.LitePalApplication"
        ...
    >
    ...
    </application>
</manifest>

基本用法

建表

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
}
<list>
    <mapping class="org.litepal.litepalsample.model.Album" />
    <mapping class="org.litepal.litepalsample.model.Song" />
</list>
SQLiteDatabase db = LitePal.getDatabase();
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
);

关系

升级

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
}

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

<version value="2" />

增加

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();

修改

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(Song.class, id); // 删除
DataSupport.delete(Song.class); // 删除所有数据
DataSupport.deleteAll(Song.class, "duration > ?" , "350"); // 条件删除

查询

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();

异步

// 查询
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"); // 删库
上一篇 下一篇

猜你喜欢

热点阅读