react-native 存储方案

AsyncStorage

react-native 官方存储方案是 AsyncStorage。AsyncStorage 是一个简单的、异步的、持久化的 Key-Value 存储系统,它对于 App 来说是全局性的。可用来代替 LocalStorage。官方推荐使用者在 AsyncStorage 的基础上做一层抽象封装,而不是直接使用 AsyncStorage。

AsyncStorage 封装库

realm

realm 是一款专为移动 ​ 端开发的高性能数据库,其宣称自己是最快的 react-native 数据库。

realm 整体的优点有这么四点:1.简单易用,2.跨平台,3.快速性能优越,4.提供高级功能。realm 核心数据引擎用 C++ 打造,并不是建立在 SQLite 之上的 ORM。因此性能就是比普通的 ORM 要快很多,甚至比单独无封装的 SQLite 还要快。同时因为是 ORM,本身在设计时也针对移动设备(iOS、Android),所以简单易用,学习成本很低。

realm 常用操作

1、 作为数据库,使用它无法就是「增删改查」等基本操作,使用之前,需要定义 model:

name:表格名称。

primaryKey:主键,这个属性的类型可以是 'int' 和 'string',并且如果设置主键之后,在更新和设置值的时候这个值必须保持唯一性,并且无法修改。声明主键可以有效地查找和更新对象,并为每个值强制实现唯一性。

properties:这个属性内放置我们需要的字段。

// models/hello.ts

export const HelloSchema = {

name: "Hello",

primaryKey: "uid", // 定义主键后,无法创建同一主键的数据

properties: {

uid: "string",

name: "string", // {type: 'string'} 的简写

phone: { type: "string", default: "136xxxxxxxx" }

}

};

2、 初始化

// 根据提供的表初始化 Realm,可同时往数组中放入多个表

let realm = new Realm({ schema: [HelloSchema] });

3、 增加数据

对域中对象的更改、创建、更新和删除,必须在 write()事务块中进行。

需要注意:写入事务具有不可忽略的开销,应该尽量减少代码中写入块的数量。

try {

realm.write(() => {

realm.create("Hello", {

uid: "a371d56d7b6f77ba31f71d22",

name: "名字1",

phone: "137xxxxxxxx"

});

realm.create("Hello", {

uid: "a371d56d7b6f77ba31f71d22",

name: "名字1",

phone: "137xxxxxxxx"

});

// ...

});

catch(e) {

console.log("Error on creation");

}

定义 model 时我们使用了 primaryKey,如果我们写入 primaryKey 之前的数据中已存在时,我们写入会出错,并且如果此时我们写入的是多个数据时,会导致后面的写入失败,所以我们可以在单个 realm.create('Hello', item) 的外面使用一个 try...catch...。

const result = await new Promise((resolve, reject) => {

try {

realm.write(() => {

for (let item of data) {

try {

realm.create("Hello", item);

} catch (e) {

console.log("write error: ", e);

}

}

resolve("ok");

});

} catch (e) {

console.log("write error: ", e);

resolve("error");

}

});

console.log("write result: ", result);

4、 查找和删除数据

查询数据允许从 realm 获取单个类型的对象,并可选择过滤和排序这些结果。最基本方法是使用 objects 方法获取给定类型的所有对象。

let dogs = realm.objects('Dog'); // retrieves all Dogs from the Realm

Filtering 参数可过滤查找结果:let dogs = realm.objects('Dog').filtered('color = "tan" AND name BEGINSWITH "B"');

Sorting 参数允许根据单个或多个属性指定排序条件和顺序:

let hondas = realm.objects('Car').filtered('make = "Honda"');

// Sort Hondas by mileage

let sortedHondas = hondas.sorted('miles');

// Sort in descending order instead

sortedHondas = hondas.sorted('miles', true);

// Sort by price in descending order and then miles in ascending

sortedHondas = hondas.sorted([['price', true], ['miles', false]]);

Limiting 参数提供了对查询结果进行“分页”的能力。这通常是为了避免从磁盘中读取太多内容,或者一次将太多结果拖入内存中。由于 realm 中的查询是惰性的,因此根本不需要执行这种分页行为,因为 realm 只会在显式访问后从查询结果中加载对象。let cars = realm.objects('Car'); let firstCars = cars.slice(0, 5);

// 删除单个数据

let result = await new Promise((resolve, reject) => {

try {

realm.write(() => {

for (let uid of data) {

try {

let dataRource = realm.objects("Hello").filtered(`uid = "${uid}"`);

realm.delete(dataRource);

console.log("delete: ", uid);

} catch (e) {

console.log("delete error: ", uid);

}

}

resolve("delete ok!");

});

} catch (e) {

console.log("delete error: ", e);

resolve("delete error!");

}

});

console.log("delete done!: ", result);

// delete all Hello

let result = await new Promise((resolve, reject) => {

try {

let dataRource = realm.objects("Hello");

realm.write(() => {

realm.delete(dataRource);

resolve("delete done!");

});

} catch (e) {

resolve("delete error!");

}

});

console.log("delete done!:", result);

5、 修改数据

如果定义 model 时包含主键,则可以让 realm 根据其主键值智能地更新或添加对象。更新时将 true 作为第三个参数传递给 create 方法。

realm.write(() => {

realm.create("Hello", {

uid: "a371d56d7b6f77ba31f71d22",

name: "Recipes",

phone: "135xxxxxxxx"

});

// Update book with new price keyed off the id

realm.create(

"Hello",

{ uid: "a371d56d7b6f77ba31f71d22", phone: "138xxxxxxxx" },

true

);

});

使用报错记录

1.安卓打包安装进入闪退

在 iOS 模拟器和安卓真机调试都是正常的,打包之后安装打开一进入就闪退,通过友盟的错误统计发现报了几个错误(现在找不到记录了

native数据类型 react_react-native中使用realm数据库相关推荐

  1. 如何在Android中使用Realm数据库

    我们都知道使用SQLite的本地数据库,它在Android 开发中用于内部存储器存储,主要存储本地数据,如联系人,电话详细信息等.现在我发现一个比SQLite更轻的数据库,被称为Realm数据库,我想 ...

  2. 查询oracle数据库的表格数据类型,excel表格中如何查询数据库数据类型-我想把excel表格中的数据导入oracle数据库中,想在......

    在excel表里,什么是:字段.记录.数据类型.多工... declare @t table(id numeric(18,2)) insert into @t SELECT   col1 FROM   ...

  3. ios realm 文件_iOS开发中使用Realm数据库

    // 查 RLMResults * dogs = [LSDog allObjects]; NSLog(@"===%@", dogs); RLMResults * pers = [L ...

  4. 大道至简——React Native在直播应用中的实践

    声明:本文来自「七牛云主办的架构师实践日--亿级移动应用架构最佳实践」的演讲内容整理.PPT.速记和现场演讲视频等参见"七牛架构师实践日"官网. 嘉宾:卜赫,七牛云布道师. 责编: ...

  5. android开发收藏功能实现,Android使用Realm数据库如何实现App中的收藏功能

    Android使用Realm数据库如何实现App中的收藏功能 发布时间:2021-05-07 11:20:34 来源:亿速云 阅读:63 作者:小新 这篇文章主要介绍了Android使用Realm数据 ...

  6. android收藏功能demo,Android使用Realm数据库实现App中的收藏功能(代码详解)

    前 言 App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式: 使用SharedPreferences存储数据: 文件存储数据: SQLite数据 ...

  7. react native在growth stack中的角色思考

    Growth Hacker在国内外的互联网界近几年都是比较火热的词,互联网巨头Facebook也许是践行Growth Hacker最好的公司.然而概念吵的火并不等于做的好,如何落地Growth Hac ...

  8. mysql desc 显示备注_MySQL_Mysql中返回一个数据库的所有表名,列名数据类型备注,desc 表名; show columns from 表名; d - phpStudy...

    Mysql中返回一个数据库的所有表名,列名数据类型备注 desc 表名; show columns from 表名; describe 表名; show create table 表名; use in ...

  9. android realm数据库,浅谈Realm数据库及其使用

    1.Realm介绍 realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android.目前还支持React Native 和 Xamarin. 201 ...

  10. Realm数据库存储 使用详解

    文章目录 一 Realm 框架 概念介绍 开发辅助工具 二 Realm 使用教程 1 简单的数据操作 创建数据模型 使用RLMRealm对象保存指定模型 使用RLMRealm对象 更新指定模型 使用R ...

最新文章

  1. ribbon 默认负载均衡 是什么_面试官:说说Ribbon是如何实现负载均衡的?
  2. Radware:2016年攻击趋势
  3. php简单的mysql类_一个简单的php mysql操作类
  4. MySql—锁机制原理
  5. Java DCL 单例模式真的需要对变量加 Volatile 吗?
  6. vue 前端显示图片加token_手摸手,带你用vue撸后台 系列二(登录权限篇)
  7. LeetCode-1两数之和
  8. 简单工厂模式和策略模式的区别
  9. 真人秀制作网站_真人秀正在毁掉中国的明星
  10. 数据库风云:老骥伏枥,新秀辈出
  11. FFmpeg 的AVCodecContext结构体详解
  12. windows宽带连接(校园网)自动连接脚本代码
  13. 2014年市场需求排名前10的编程语言 - 生命的延续是 BI
  14. 96微信编辑器html在哪里,96微信编辑器怎么把文章生成链接?
  15. 孙子定理c语言程序,中国剩余定理(孙子定理)的证明和c++求解
  16. 10.5亿人次观看珠海航展!图扑助力展商数字孪生演示,太震撼!
  17. Android之ContextMenu的使用方法以及与OptionMenu的区别
  18. Flutter的圆形头像四种简单用法
  19. 安卓机器人做图软件_绘画机器人andy下载-美图秀秀绘画机器人下载v7.0.0.0 安卓版-西西软件下载...
  20. C语言_有趣的逻辑推理问题

热门文章

  1. 新职业教育的三节课,凭什么做到今天这样
  2. BZOJ5287 HNOI2018毒瘤
  3. 微信提现(商户向商家转账)
  4. 机智云IOT软件平台受邀参展STM32全国巡回研讨会/中国电信天翼智能生态博览会/签署“5G+天翼云+AI”战略合作
  5. android郭霖博客,Runtime Permissions(郭霖CSDN公开课)
  6. 解决安卓软件提示“解析软件包时出现问题”
  7. Matlab Classification Learner
  8. 从 广义相对论 看到 “数学陷阱”
  9. D. Good Triple
  10. 【沧小海笔记】之基于FPGA的以太网设计相关知识——第二章 物理层介绍(基于88E1111)