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语句,是数据库开发一大利器。
网友评论