Android技术知识Android开发程序员

数据库利器 LitePal2.0使用介绍

2018-06-13  本文已影响206人  MrHorse1992

1 前言

LitePal是郭神开发的一款安卓数据库操作的开源库。Litepal可以帮助开发者无需编写SQL语句即可完成数据库的增删改查。郭神最近更新了LitePal至2.0版本。具体使用过程如下:

2 添加库

Eclipse 只能去下载jar包的方式
Android Studio在build.gradle中添加依赖库

    dependencies {
        compile 'org.litepal.android:core:2.0.0'
    }

3 配置litepal.xml文件

在工程assets目录下创建litepal.xml文件,注意litepal.xml需要创建在assets目录下,不要创建在values文件夹下。创建完成后编辑litepal.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--创建数据库名称,默认在末尾添加.db扩展名 -->
    <dbname value="demo" />

    <!--数据库版本号,用于更新数据库-->
    <version value="1" />

    <!--
        将定义的数据实体类映射到数据表中
        例如有实体类Reader和Magazine,则映射方式如下:    
        <list>
            <mapping class="com.test.model.Reader" />
            <mapping class="com.test.model.Magazine" />
        </list>
    -->
    <list>
    </list>
    
    <!--
       数据库文件存储路径,建议默认
        <storage value="external" />
    -->
    
</litepal>

4 配置Application

使用LitePal时需要配置Application,配置方式有两种
(1) 若你的应用程序没有重继承Application类则在AndroidManifest.xml中添加

<manifest>
    <application
        android:name="org.litepal.LitePalApplication"
        ...
    >
        ...
    </application>
</manifest>

(2) 若重新继承Application类则可以使用以下代码:

public class YourOwnApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }
    ...
}

5 创建数据对象

2.0版本数据类将继承LitePalSupport类,不再是之前的DataSupport类。

public class Album extends LitePalSupport {
    
    @Column(unique = true, defaultValue = "unknown")
    private String name;
    
    private float price;
    
    private byte[] cover;
    
    private List<Song> songs = new ArrayList<Song>();

    // generated getters and setters.
    ...
}
public class Song extends LitePalSupport {
    
    @Column(nullable = false)
    private String name;
    
    private int duration;
    
    @Column(ignore = true)
    private String uselessField;
    
    private Album album;

    // generated getters and setters.
    ...
}

若有上述两个数据实体类则需要修改litepal.xml,list中添加

<list>
    <mapping class="org.litepal.litepalsample.model.Album" />
    <mapping class="org.litepal.litepalsample.model.Song" />
</list>

通过以上配置,数据库以及数据表将在首次操作数据库时创建。

6 更新数据库

修改数据类

public class Album extends LitePalSupport {
    
    @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>();

    // generated getters and setters.
    ...
}

在litepal.xml中修改<version>标签为对应的数据库版本。数据表将会在下一次操作数据库时自动更新。

7 保存数据

数据的保存只需调用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();

8 查询数据

(1) 通过指定id查询

Song song = LitePal.find(Song.class, id);

(2) 查询全部数据

List<Song> allSongs = LitePal.findAll(Song.class);

(3) 条件查询

List<Song> songs = LitePal.where("name like ? and duration < ?", "song%", "200").order("duration").find(Song.class);

9 更新数据

(1) 通过find方法查找到该对象,更新对象值,然后在保存。
例如:

Album albumToUpdate = LitePal.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();

(2) 使用update()或者updateAll()方法。

//更新指定id的数据
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(id);
//更新全部数据
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "album");

10 删除数据

调用delete()或者deleteAll()方法删除数据

LitePal.delete(Song.class, id);
LitePal.deleteAll(Song.class, "duration > ?" , "350");

11 异步操作

LitePal支持异步操作,防止主线程耗时。具体使用方式如下:
(1) 异步查询

LitePal.findAllAsync(Song.class).listen(new FindMultiCallback() {
    @Override
    public <T> void onFinish(List<T> t) {
        List<Song> allSongs = (List<Song>) t;
    }
});

(2) 异步保存

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) {

    }
});

其他方式类似,只是在添加Async后缀并且回调onFinish方法。

12 多数据库

如果程序需要多个数据库可以使用以下方法创建:

//创建demo2.db数据库,同时创建singer,album,song表
LitePalDB litePalDB = new LitePalDB("demo2", 1);
litePalDB.addClassName(Singer.class.getName());
litePalDB.addClassName(Album.class.getName());
litePalDB.addClassName(Song.class.getName());
LitePal.use(litePalDB);

13 删除数据库

LitePal.deleteDatabase("demo2");

14 膜拜一波

LitePal简化了数据库操作,避免写SQL语句,是数据库开发一大利器。

上一篇 下一篇

猜你喜欢

热点阅读