根據(jù)條件查詢
var condition = queryCondition.text.toString()
if (condition.isEmpty()) return toast("請(qǐng)輸入查詢條件")
var queryResult = userBox.query().equal(User_.name, condition).build().find()
查詢對(duì)象的復(fù)用
先初始化查詢對(duì)象:
userQuery = userBox.query().equal(User_.name, "").build()
設(shè)置查詢對(duì)象的參數(shù)后再查詢:
var queryResult = userQuery.setParameter(User_.name, condition).find()
集成 RxJava
先依賴:
compile 'io.objectbox:objectbox-rxjava:0.9.8'
最簡(jiǎn)單的使用:
fun queryAllWithRxJava(view: View) {
val query = userBox.query().build()
query.subscribe()
.on(AndroidScheduler.mainThread())
.observer {
data -> updateUi(data)
}
}
private fun updateUi(data: List<User>) {
// 打印 true
Log.d(TAG, "是否是主線程" + isInMainThread().toString())
}
Data 類字段可用的注解
- @Index
如果這個(gè)字段經(jīng)常用來(lái)查詢,加上 @Index 可以提高查詢速度。 - @Transient
如果字段不需要儲(chǔ)存到數(shù)據(jù)庫(kù)。 - @NameInDb
指定字段儲(chǔ)存在數(shù)據(jù)庫(kù)中的名稱脚草。 - @Id(assignable = true)
手動(dòng)分配 ID。 - @Relation
一對(duì)一或一對(duì)多關(guān)系
事務(wù)處理
API | 說(shuō)明 |
---|---|
runInTx | 在給定的 runnable 中運(yùn)行的事務(wù)啥么。 |
runInReadTx | 只讀事務(wù)硼砰,不同于 runInTx糠赦,允許并發(fā)讀取 |
runInTxAsync | 運(yùn)行在一個(gè)單獨(dú)的線程中執(zhí)行碎罚,執(zhí)行完成后磅废,返回 callback。 |
callInTx 與 runInTx 相似荆烈,不同的是可以有返回值拯勉。
例子:
boxStore.runInTx(new Runnable() {
@Override
public void run() {
for(User user: allUsers) {
if(modify(user)) box.put(user);
else box.remove(user);
}
}
});
數(shù)據(jù)庫(kù)升級(jí)
- 在要修改的字段上添加 @Uid 注解
- Make Project
- 修改字段名稱
修改或插入大量數(shù)據(jù)的正確方法
for(User user: allUsers) {
modify(user); // modifies properties of given user
}
box.put(allUsers);
子線程添加和獲取保存結(jié)果
Java 版本:
boxStore.runInTxAsync(new Runnable() {
@Override
public void run() {
// 這里是子線程
notesBox.put(note);
}
}, new TxCallback<Void>() {
@Override
public void txFinished(@Nullable Void result, @Nullable Throwable error) {
if (error == null) {
Log.d(TAG, "txFinished: " + "添加成功");
} else {
Log.d(TAG, "txFinished: " + "添加失敗");
}
}
});
Kotlin 版本:
boxStore.runInTxAsync({
userBox.put(user)
}) { _, error ->
if (error == null) {
Log.d(TAG, "txFinished: " + "添加成功")
} else {
Log.d(TAG, "txFinished: " + "添加失敗")
}