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: BoxStoreprivate setfun 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 {@Idvar id: Long = 0var 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.mzph.cn/news/5506.shtml

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

相关文章

安全开发-JS应用原生开发JQuery库Ajax技术加密编码库断点调试逆向分析元素属性操作

文章目录 JS原生开发-文件上传-变量&对象&函数&事件JS导入库开发-登录验证-JQuery库&Ajax技术JS导入库开发-编码加密-逆向调试 JS原生开发-文件上传-变量&对象&函数&事件 1、布置前端页面 2、JS获取提交数据 3、JS对上传格式判断 <script>…

抖音seo开源源码,抖音优化系统定制方案

抖音作为目前最火热的短视频平台之一&#xff0c;其在移动互联网领域的影响越来越大。然而&#xff0c;一款成功的产品未必仅仅靠着其自身的功能和品质就能获得市场的认可&#xff0c;还需要通过优化SEO来实现更好的曝光率。下面&#xff0c;本文将介绍如何优化抖音SEO源码开发…

Vue3通透教程【十六】TS编译配置

文章目录 &#x1f31f; 写在前面&#x1f31f; 初始化配置文件⭐ target⭐ module⭐ lib⭐ types/node⭐ include⭐ outDir&#x1f31f; 写在最后 &#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更…

【英杰送书第三期】Spring 解决依赖版本不一致报错 | 文末送书

Yan-英杰的主 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 问题描述 报错信息如下 报错描述 解决方法 总结 【粉丝福利】 【文末送书】 目录&#xff1a; 本书特色&#xff1a; 问题描述 报错信息如下 Description:An attempt…

Data Transfer Object-DTO,数据传输对象,前端参数设计多个数据表对象

涉及两张表的两个实体对象 用于在业务逻辑层和持久层&#xff08;数据库访问层&#xff09;之间传输数据。 DTO的主要目的是将多个实体&#xff08;Entity&#xff09;的部分属性或多个实体关联属性封装成一个对象&#xff0c;以便在业务层进行数据传输和处理&#xff0c;从而…

Python 算法基础篇:冒泡排序和选择排序

Python 算法基础篇&#xff1a;冒泡排序和选择排序 引言 1. 冒泡排序算法概述2. 冒泡排序算法实现实例1&#xff1a;冒泡排序 3. 选择排序算法概述4. 选择排序算法实现实例2&#xff1a;选择排序 5. 冒泡排序与选择排序的对比总结 引言 冒泡排序和选择排序是两种常用的排序算法…

高校大数据教材推荐-《Python中文自然语言处理基础与实战》

《Python中文自然语言处理基础与实战》是“十四五”职业教育国家规划教材&#xff0c;是大数据应用开发&#xff08;Python&#xff09;“1X”职业技能等级证书配套系列教材。本书以项目为载体&#xff0c;突出职业技能。坚持理实一体化的理念。理实一体化&#xff0c;就是理论…

iOS--虚拟内存

参考文章 要想了解什么是VM Regions&#xff0c;就得先了解什么是虚拟内存。当我们向系统申请内存时&#xff0c;系统并不会给你返回物理内存的地址&#xff0c;而是给你一个虚拟内存地址。每个进程都拥有相同大小的虚拟地址空间&#xff0c;对于32位的进程&#xff0c;可以拥有…

面试 | 双法妙解压缩字符串【遍历统计 + 双指针】

一、题目描述 原题传送门 二、思路分析 首先我们来分析一下解决本题所需要的思路 题目的意思很简单&#xff0c;就是统计原本的字符串中的每个字符出现的次数&#xff0c;然后以【字符&#xff0c;出现的次数】这样的结构来字符串&#xff0c;以起到一个压缩的效果&#xff0c…

网络安全:密码学基本理论.

网络安全&#xff1a;密码学基本理论. 密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律&#xff0c;应用于编制密码以保守通信秘密的&#xff0c;称为编码学&#xff1b;应用于破译密码以获取通信情报的&#xff0c;称为破译学&#xff0c;总称密码学. 目录…

ffmpeg离线安装ffmpeg-4.1.4-amd64-static.tar.xz

1.下载离线包 John Van Sickle - FFmpeg Static Builds 找历史版本&#xff1a;Index of /ffmpeg/old-releases 我选择是的4.1.4版本 2.解压 tar -xvJf ffmpeg-4.1.4-amd64-static.tar.xz 3.移动文件到opt目录下 4.添加全局链接 ln -s /opt/ffmpeg-4.1.4-amd64-static/ffm…

在macOS、Windows上使用VSCode + SSH实现远程Matplotlib图形显示

简介 在 macOS 上使用 VSCode SSH 环境来显示 Matplotlib 绘制的图形需要进行一些配置。因为默认情况下&#xff0c; Matplotlib 的图形是无法显示在远程计算机的桌面上的。您可以通过设置 Matplotlib 使用不同的后端(backend)来实现将图形显示在本地计算机上。 第一步&…

Docker安装Nacos2.0.2

docker拉取镜像 docker pull nacos/nacos-server:2.0.2查看镜像 docker images创建容器和运行 docker run -e JAVA_OPTS"-Xms256m -Xmx256m" -e MODEstandalone -e PREFER_HOST_MODEhostname -p 8848:8848 --privilegedtrue --restartalways --name nacos -d naco…

小程序制作教程

步骤一&#xff1a;规划和设计 在开始制作微信小程序之前&#xff0c;首先需要规划和设计您的小程序。确定您想要提供的服务或功能&#xff0c;并考虑用户体验和界面设计。绘制草图和构思完整的页面布局&#xff0c;这将使您更好地理解小程序结构和功能。 步骤二&#xff1a;…

Python Selenium设计模式及代码实现

前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享&#xff0c;以便大家在实践中对POM的特点、应用场景和核心思想有一定的理解和掌握。 为什么要用POM 基于python selenium2开始UI级自动化测试并不是多么艰巨的任务。**只需要定位到元素&#xff0c;…

公网访问的Linux CentOS本地Web站点搭建指南

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 前言 在web项目中,部署的web站点需要被外部访问,则…

基于SPDK-vhost的云原生Kubevirt虚拟化存储IO的优化方案

摘要 本文主要介绍针对云原生kubernetes虚拟化IO的应用场景&#xff0c;在Kubevirt中引入SPDK-vhost的支持&#xff0c;来加速虚机中IO存储性能。同时基于Intel开源的Workload Service Framework[1]平台集成部署一套端到端虚拟化IO的应用场景做基本的性能对比测试。 云原生Kube…

人员定位安全管控系统:提升安全管理水平的智能解决方案

在当今社会&#xff0c;人员安全管理成为各行各业关注的焦点。为了保障人员的安全和提高管理效率&#xff0c;人员定位安全管控系统应运而生。 人员定位安全管控系统采用多种定位技术来实现对人员位置的准确定位&#xff0c;如GPS&#xff08;全球定位系统&#xff09;、Wi-Fi…

超低输入电压升压电路解决方案

便携式产品一般都采用电池供电&#xff0c;而因为成本和体积方面的考虑&#xff0c;在设计上有减少使用电池数量及体积的趋势。另外&#xff0c;亦因全球能源问题&#xff0c;各种各类的电池使用已备受关注了。当中包括太阳能电池及燃料电池。 而这样就会影响到电源电压比设备所…

Flask的send file和send_from_directory的区别

可以自行查看flask 文档。 send file高效&#xff1b; send from directory安全&#xff0c;且适用于静态资源交互。 都是实现相同的功能的。 send_file send_from_directory