Android ObjectBox数据库的使用与详解

一、介绍

Room数据库

        之前我已介绍了jetpack组件的数据库:Room,有小伙伴需要了解Room数据库可以查看这个地址:Android JetPack组件之Room数据库的集成与详解_android room数据库_蜗牛、Z的博客-CSDN博客

        数据库的性能对设备来说很重要,我们都知道,数据库其实是文件格式保存,通过一定的规则查找内容的。但是设备不同,选择数据库的目的自然不同。

今天我将介绍市面最近比较流行的数据库ObjectBox,从接入到使用以及问题的总结

什么是移动设备数据库?

        移动数据库是在移动设备上运行的边缘数据库,即支持Android和iOS。它是一种嵌入式数据库(嵌入到应用程序中的数据库),在移动设备等受限的去中心化设备上也进行了高性能优化。

ObjectBox数据库

        objectBox数据库是一个新的产品,底层是以C和C++完成的数据库引擎。属于插件化东西,比Room接入要复杂一些,这是一款NOsql的数据库,也就是说,这个数据库不需要sql语句就可以使用,是以对象为实体的操作数据库。

1、官方

Mobile Database | Android Database | Swift Database | Flutter Database

接入流程

1、在工程引入编译插件

buildscript {
    ext.objectboxVersion = "3.6.0"

    dependencies {

        classpath("io.objectbox:objectbox-gradle-plugin:$objectboxVersion")
    }
}

说明:目前官方的最近版本是3.6.0

2、模块引入插件

plugins {
  
    id("kotlin-android") // Only for Kotlin projects.
    id("kotlin-kapt") // Only for Kotlin projects.
    id("io.objectbox") // Apply last.
}

//或者 根据gradle高低版本选择构建方法
apply plugin: "kotlin-android" // Only for Kotlin projects.
apply plugin: "kotlin-kapt" // Only for Kotlin projects.
apply plugin: "io.objectbox" // Apply last.

说明:因为objectBox是kotlin语言写的,版本是1.7.20,所以如果你的kotlin版本过低,则需要升级或者,22.0之间的androidsudio需要升级到最近版本。

3.代码初始化,执行make project

object ObjectBox {
    lateinit var store: BoxStore
        private set

    fun init(context: Context) {
        store = MyObjectBox.builder()
                .androidContext(context.applicationContext)
                .build()
    }
}

注意:

1、有人代码中无法找到MyObjectBox这个类,是因为你第一次接入,需要build一下项目,插件才能自动生成。

2、初始化入口在Application

表的管理

在objectBox中,表是通过对象来维护的,需要通过BoxStore的store.boxFor(cls)来获取这张表。参数class就是当前表的class的实体。

1.表的创建


@Entity
class MyInfo {

    @Id
    var id: Long = 0
    var name: String? = ""
}

说明:通过@Entity来修饰对象是一个表的实体,字段指向一个id,其他修饰可以自行查看

2.表的获取

   public fun <T> getDataBaseBox(cls: Class<T>):Box<T> {
        return store.boxFor(cls)
    }

说明:通过泛型来获取表,如果不存在就会创建

表的操作

表的操作其实很简单,都是通过对象来完成的。

//插入一条数据
    public fun <T> insertItem(t: T, cls: Class<T>): Long {

        return store.boxFor(cls).put(t)
    }
//批量插入数据
    public fun <T> insertList(t: MutableList<T>, cls: Class<T>) {

        store.boxFor(cls).put(t)
    }
//获取表中第一条数据

    public fun <T> getFirst(cls: Class<T>): T {

        return store.boxFor(cls).all.first()
    }
//获取表中的所有数据
    public fun <T> getAll(t: T, cls: Class<T>): MutableList<T> {

        return store.boxFor(cls).all
    }
//清空表

    public fun <T> getClean(cls: Class<T>) {
        store.boxFor(cls).removeAll()

    }
//删除单个数据
    public fun <T> getDeleteItem(t: T, cls: Class<T>) {
        store.boxFor(cls).remove(t)

    }

        这些都是基于对象完成的,还有一些操作是基于Id来完成,保持一些查询也是基于查询条件,获取表的对象等........

这个表是自动关闭,和释放资源,你只管用,其他不需要你去操作

三、总结

如果你是新手,或者小白。无法自己去维护复杂的逻辑,像表的关闭等都不需要你管

常见问题解决办法

1.报错

is not a known entity. Please add it and trigger generation again

解答:是因为你的model没有引入插件,虽然你的项目集成了插件,但是在每个模块还是需要单独引入,和kotlin一样,模块里是独立的。否则你创建表报错。

只要这个模块需要创建表,你就需要再模块中引入:id("io.objectbox"),编译后会产生一个objectbox-model的文件夹,里面就是你的表信息

2.找不到MyobjectBox

刚接入项目一定要build一下项目, 或者make。否则不会自动生成,只有生成后才可以使用

3.提示kotlin版本不一致

因为objectBox的kotlin版本是在1.7.20,kotlin在1.7后面有大改版,所以你的kotlin必须升级,升级kotin有可能需要升级的androidstudio文件,所以你必须要保持最近的。注意kotlin版本是:1.7.20,不是1.7.2,如果你写1.7.2无法更新,会报升级失败

猜你喜欢

转载自blog.csdn.net/qq36246172/article/details/131864280