Android ObjectBox数据库的使用与详解

news2025/1/14 1:04:32

一、介绍

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无法更新,会报升级失败

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【雕爷学编程】Arduino动手做(168)---ATTINY85迷你USB开发板

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【Spring MVC学习】连接 接收请求参数 响应返回参数

目录 前言&#xff1a;认识Spring MVC &#x1f337;1、什么是MVC&#xff1f; 一、建立连接&#xff08;5个注解&#xff09; &#x1f337;1、RequestMapping注解:注册接⼝的路由映射&#xff08;默认返回页面&#xff09; &#x1f337;2、ResponseBody注解&#xff1a…

从简单线性回归到TensorFlow深度学习

大家好&#xff0c;人工智能近年来变得越来越流行&#xff0c;学习人工智能的需求也随之增加&#xff0c;尤其是许多IT专业人士希望利用机器学习的强大功能&#xff0c;但面临不小的挑战&#xff0c;尤其是在理论和数学上。 步骤1&#xff1a;线性回归 线性回归是一种统计学中…

Centos7:http/PhP升级

系列文章目录 RHCE第0章&#xff1a;RHCE开始前的准备 RHCE第1章&#xff1a;Web服务器&#xff08;上&#xff09; RHCE第1章&#xff1a;Web服务器&#xff08;下&#xff09; RHCE第2章&#xff1a;DNS服务 RHCE第3章&#xff1a;DHCP服务器 RHCE第4章&#xff1a;Firewall…

第一天基础名词

文章目录 一、域名1、域名的概念2、域名注册3、域名的分类 二、DNS1、DNS的概念2、DNS解析3、本地hosts文件与DNS的关系4、如何查看本地Hosts文件 三、CDN1、CDN的概念2、CDN原理&#xff08;1&#xff09;回顾域名解析&#xff08;2&#xff09;CDN原理 3、常见DNS攻击 四、脚…

【C语言】结构体与offsetof实现

远看山有色&#xff0c;近听水无声。春去花还在&#xff0c;人来鸟不惊。 — 唐代王维《画》 这篇博客我们会详细介绍结构体相关知识&#xff0c;干货满满。 结构体的声明&#x1f340; 一般来说结构体应该有成员列表和变量列表这两个基础的模式。 例如描述一个学生&#xf…

Windows下YUICompress实现js、css混淆压缩

首先&#xff0c;我们针对Linux下的部分命令进行Windows系统的对应实现 ls————cmd /c dir/b rm————cmd /c del mv————cmd /c move pwd————cmd /c chdir 注&#xff1a;cmd /c是执行完命令后关闭命令行窗口、cmd /k是执行完命令后不关闭命令行窗口、cmd /c sta…

Vue第五篇:电商网站登录时vuex的使用

页面&#xff1a; 代码资源见&#xff1a;https://download.csdn.net/download/benben044/88071987 其中css使用开源库的UI&#xff0c;Main里面的元素是一张截图。 通过vuecli脚手架生成的代码架构如下&#xff1a; 一、入口组件App.vue解析 主页面主要由两部分组成&#x…

Leetcode-每日一题【114.二叉树展开为链表】

题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例…

OSI七层模型和TCP/IP四层模型以及五层模型

OSI七层模型&#xff08;Open System Interconnect&#xff09;即开放系统互连参考模型&#xff0c;是由ISO&#xff08;International Organization for Standardization&#xff09;国际标准化组织提出的&#xff0c;用于计算机或通信系统间互联的标准体系。 从上到下可分为…

Flask 导航栏,模版渲染多页面

项目结构 app.py from flask import Flask, render_templateapp Flask(__name__)app.route(/) def index():return render_template(index.html)app.route(/secondpage) def secondpage():return render_template(secondpage.html)app.route(/threepage) def threepage():ret…

Linux驱动开发实战(一)——设备驱动模型

文章目录 前言设备驱动模型概述设备驱动模型的功能sysfs文件系统sysfs文件系统的目录结构 设备驱动模型的核心数据结构kobject结构体设备属性kobj_type 注册kobject到sysfs中的实例设备驱动模型结构kset集合kset与kobject的关系kset相关的操作函数注册kobject到sysfs中的实例实…

绘出「星辰大海」:华为云Astro轻应用新手指南-第一章

第1章 旅程的开端 发现Astro轻应用地图 第1站&#xff1a;创建账户 首先&#xff0c;你需要在华为云Astro官网注册专属账号。若已有华为账户&#xff0c;可直接登录。 在官网点击「立即使用」&#xff0c;即可跳转至「登录界面」 在「登录界面」点击「注册」&#xff0c;注册…

后端(四):博客系统项目

咱们在这里实现的是后端项目&#xff0c;前端代码就提一提&#xff0c;不全做重点介绍&#xff0c;在开始讲解这个博客系统项目之前&#xff0c;我们先看看这个项目的前端界面&#xff1a; 登录界面&#xff1a; 个人主页&#xff1a; 博客详情页&#xff1a; 写博客页&#x…

Python实战

官方文档 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 LearnPythonPython 实现功能点demo

Mac苹果系统安装双系统Windows10 Windows11 BOOTCAMP

Mac系统安装双系统Windows10 BOOTCAMP详细 1.下载Windows系统2.开始安装3.安装驱动4.默认启动5.备注 1.下载Windows系统 注意一下所有安装全程接充电器操作&#xff0c;以免安装过程中电脑断电带来不必要影响。 从下列方式选择合适的系统进行下载。 MSDN https://msdn.itelly…

【NLP】无服务器问答系统

一、说明 在NLP的眼见的应用&#xff0c;就是在“ 当你在谷歌上提出一个问题并立即得到答案时会发生什么&#xff1f;例如&#xff0c;如果我们在谷歌搜索中询问谁是美国总统&#xff0c;我们会得到以下回答&#xff1a;Joe Biden&#xff1b;这是一个搜索问题&#xff0c;同时…

概率论的学习和整理--番外14:如何理解 dutu输光定理

解决问题 1 dutu 拿100是赌一次好&#xff0c;还是100次1元的好&#xff1f; 一般的地方&#xff0c;如果不是公平赌局&#xff0c;而期望是负数的话 其实du次数越多越亏 2 1%就基本能决定胜负 了 3 千万不要陷入常人思维&#xff0c;用筹码数量思考&#xff0c;输光为止&am…

选读SQL经典实例笔记10_高级查询

1. 结果集分页 1.1. 只有做过了排序&#xff0c;才有可能准确地从结果集中返回指定区间的记录 1.2. DB2 1.3. Oracle 1.4. SQL Server 1.5. sql select salfrom ( select row_number() over (order by sal) as rn,salfrom emp) xwhere rn between 1 and 5 SAL ----800 95…

周末作业 c++

将顺序栈&#xff0c;循环队列定义成模板类型&#xff1a; #include <iostream>using namespace std;template <typename T,int Maxsize> class seqstack { private:T data[Maxsize];int top; public:seqstack() //无参构造{top-1;cout<<"无参构造…