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,继承 DataSupportid字段可写可不写,默认自动产生
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>();
}
public class Song extends DataSupport {
@Column(nullable =
false)
private String name;
private int duration;
@Column(ignore =
true)
private String uselessField;
private Album album;
}
修改 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>();
}
修改 litepal.xml
版本号增加,数据自动保存
<version value="2" />
丢失数据状况
注解成员变量unique = true改变注解unique = true改变注解nullable = false
增加
DataSupport:saveAllBean: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/updateAllBean: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/markAsDeletedBean:delete/clearSavedStateBean必须是已持久化的对象,否则无效
DataSupport.delete(Song.class, id);
DataSupport.delete(Song.class);
DataSupport.deleteAll(Song.class,
"duration > ?" ,
"350");
查询
DataSupport:find/findFirst/findLast/findAll/findBySQL/isExistDataSupport: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.useDefault();
LitePal.deleteDatabase(
"newdb");
转载请注明原文地址: https://ju.6miu.com/read-14130.html