LitePal
最新dependencies
compile 'org.litepal.android:core:1.6.0'
配置litepal.xml
在main目录下创建assets文件夹,在assets目录下创建litepal.xml
内容如下:
初始化
由于操作数据库时需要用到Context,所以在自定义Application的oncreat()中初始化数据库LitePal.initialize(this)
创建表
/**
* 存储已读未读的id
*/
data class NoticeId(var numId: Int) : DataSupport()
LitePal
会在每个表中自动生成一个id
列,毕竟每张表都一定要有主键的,所以当存储一些含有id
的数据,并且要存储的id
和自增的不一样的时候要谨慎,要把id
存到另外的列中,比如numId
等,总之自己创建的表(bean
对象)尽量不要含有id
.
现在只要你对数据库有任何的操作,NoticeId
表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase
的实例,如下所示:
QLiteDatabase db = Connector.getDatabase();
为了方便可以在LitePal.initialize(this)
后面加上Connector.getDatabase()
这样就创建了数据库中的表
class App : Application() {
override fun onCreate() {
super.onCreate()
LitePal.initialize(this)
Connector.getDatabase()
}
升级数据
有段时间项目用到数据库存储一些数据,看了好多结果还是感觉郭神的LitePal最好用,下面是1.4.1版本的总结及用法
http://mp.weixin.qq.com/s/5FMsDWq7mj55iBxpLCNTwg
下面我将继续书写一下LitePal 1.5.0的一些更新的内容
1.异步操作数据库
Android官方是建议将所有的数据库操作都放在子线程中进行的。所以这一次支持异步操作数据库是LitePal 1.5.0版本的核心功能.
- LitePal中所有的CRUD方法都加入了一个Async的副本方法。原来的有find()方法,现在多出一个findAsycn()方法,原来有save()方法,现在多出saveAsync()方法。如果想要进行异步数据库操作的时候,调用原API相对应的Async副本方法就可以了。
- 由于是异步操作,那异步操作的结果就只能依靠回调来完成。所以,每一个Async副本方法的后面添加了一个listen()方法,专门用于监听异步操作的结果。
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) {
}
});
这里调用了findAll()方法的Async副本,也就是findAllAsyc()方法,并串接了一个listen()方法用于监听查询结果。需要注意的是,查询结果是使用泛型的方式回调到onFinish()方法中的,也就是说开发人员还需要自己做一次向下转型操作才行。回调到onFinish()方法之后都会切回到主线程.
2.不存在就存储,已存在就更新
LitePal 1.5.0版本中新增了一个saveOrUpdate()方法,专门用来处理这种不存在就存储,已存在就更新的需求。
使用saveOrUpdate()方法存储,有就更新 没有就存:
Person p = new Person();
p.setName("小明");
p.setAge(16);
p.saveOrUpdate("name=?", p.getName());
调用saveOrUpdate()方法后,LitePal内部会自动判断,如果表中已经存在小明这条记录了,就会自动更新,如果不存在的话,就会自动插入。
当然,这个新增的saveOrUpdate()方法也有它的Async副本。如果你想异步进行saveOrUpdate操作,那么只需要这样写就可以了:
Person p = new Person();
p.setName("小明");
p.setAge(16);
p.saveOrUpdateAsync("name=?", p.getName())
.listen(new SaveCallback() {
@Override
public void onFinish(boolean success) {
}
});
好了,LitePal 1.5.0版本中最主要的两大新功能就介绍的差不多了
3.如何升级
升级方式一如既往的简单,如果你使用的是Android Studio,只需要在build.gradle中修改一下配置即可:
dependencies {
compile 'org.litepal.android:core:1.5.0'
}
1.5.0版本中的所有的功能都是向下兼容的,因此你的升级不用付出任何成本。
kotlin存储对象
litepal.xml部分不变
创建一个kotlin数据bean并继承DataSupport,如果不想创建对象的时候都初始化一遍,直接在下面写成:(var name: String = "",var age: Int = 0)即可
data class Student(var name: String,var age: Int) : DataSupport()
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
//普通存储
Student("张三", 27).save()
val toJson = Gson().toJson(Student("王五", 78))
//saveOrUpdate:没有就存储,有就直接覆盖
Gson().fromJson(toJson, Student::class.java).saveOrUpdate("name=?", "王五")
}
}
阅读原文