React Native 使用 realm  数据库

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

一、安装依赖

  1. npm i -S realm

Link

  1. react-native link

二、使用

1)先定义工具文件

RealmUtil.js

  1. import Realm from 'realm';
  2.  
  3. /***表定义区**/
  4. export const HistoryTableName = 'History';
  5. export const CityTableName = 'City';
  6.  
  7. const HistorySchema = {
  8. name: HistoryTableName,
  9. primaryKey: 'id',
  10. properties: {
  11. id: 'int',
  12. name: 'string',
  13. }
  14. };
  15.  
  16. const CitySchema = {
  17. name: CityTableName,
  18. primaryKey: 'city_id',
  19. properties: {
  20. city_id: 'int',
  21. city_name: 'string',
  22. }
  23. };
  24.  
  25. const instance = new Realm({
  26. schema: [
  27. HistorySchema,
  28. CitySchema,
  29. ],
  30. deleteRealmIfMigrationNeeded: true,
  31. inMemory: false,
  32. });
  33.  
  34. /***表使用区**/
  35. export function writeToRealm(obj,tabName) {
  36. return new Promise((resolve, reject) => {
  37. instance.write(() => {
  38. instance.create(tabName, obj, true)
  39. resolve(true)
  40. })
  41. })
  42. }
  43.  
  44. export function queryAllFromRealm(tabName) {
  45. return new Promise((resolve, reject) => {
  46. let obj = instance.objects(tabName);
  47. let objStr = JSON.stringify(obj);
  48. resolve(JSON.parse(objStr))
  49. })
  50. }
  51.  
  52. export function clearAllFromRealm(tabName) {
  53. return new Promise((resolve, reject) => {
  54. instance.write(() => {
  55. let arrays = instance.objects(tabName);
  56. instance.delete(arrays);
  57. resolve(true)
  58. })
  59. })
  60. }
  61.  
  62. export function clearRowFromRealm(id,tabName) {
  63. return new Promise((resolve, reject) => {
  64. instance.write(() => {
  65. let arrays = instance.objects(tabName);
  66. let row = arrays.filtered('id==' + id);
  67. instance.delete(row);
  68. resolve(true)
  69. })
  70. })
  71. }

2)调用文件

  1. import React, {Component} from "react";
  2. import {StyleSheet, Text, ToastAndroid, TouchableHighlight, View,} from 'react-native';
  3. import {
  4. HistoryTableName,
  5. CityTableName,
  6. clearAllFromRealm,
  7. queryAllFromRealm,
  8. writeToRealm,
  9. clearRowFromRealm
  10. } from "./RealmUtil";
  11.  
  12. export default class TestRealm extends Component {
  13. componentWillMount() {
  14.  
  15. }
  16.  
  17. //表1操作
  18. _addData() {
  19. clearAllFromRealm(HistoryTableName);
  20.  
  21. let row1 = {"id": , "name": "战狼1"};
  22. writeToRealm(row1, HistoryTableName).then(() => {
  23. ToastAndroid.show('写入完成1', ToastAndroid.SHORT);
  24. });
  25. let row2 = {"id": , "name": "战狼2"};
  26. writeToRealm(row2, HistoryTableName).then(() => {
  27. ToastAndroid.show('写入完成2', ToastAndroid.SHORT);
  28. });
  29. }
  30.  
  31. _readAllData() {
  32. queryAllFromRealm(HistoryTableName).then((list) => {
  33. for (let key in list) {
  34. ToastAndroid.show('id:' + list[key].id + ',name:' + list[key].name, ToastAndroid.SHORT);
  35. }
  36. });
  37. }
  38.  
  39. _updateData() {
  40. let row2 = {"id": , "name": "北京222"};
  41. writeToRealm(row2, HistoryTableName).then(() => {
  42. ToastAndroid.show('修改完成', ToastAndroid.SHORT);
  43. });
  44. }
  45.  
  46. _delRowData() {
  47. //删除第一行
  48. clearRowFromRealm(, HistoryTableName).then(() => {
  49. ToastAndroid.show('删除完成', ToastAndroid.SHORT);
  50. });
  51. }
  52.  
  53. //表2操作
  54. _addData2() {
  55. clearAllFromRealm(CityTableName);
  56.  
  57. let row1 = {"city_id": , "city_name": "上海"};
  58. writeToRealm(row1, CityTableName).then(() => {
  59. ToastAndroid.show('2写入完成1', ToastAndroid.SHORT);
  60. });
  61. let row2 = {"city_id": , "city_name": "北京"};
  62. writeToRealm(row2, CityTableName).then(() => {
  63. ToastAndroid.show('2写入完成2', ToastAndroid.SHORT);
  64. });
  65. }
  66.  
  67. _readAllData2() {
  68. queryAllFromRealm(CityTableName).then((list) => {
  69. for (let key in list) {
  70. ToastAndroid.show('城市ID:' + list[key].city_id + ',城市名:' + list[key].city_name, ToastAndroid.SHORT);
  71. }
  72. });
  73. }
  74.  
  75. render() {
  76. return (
  77. <View style={{flex: }}>
  78. <View style={{padding: }}><Text>表1操作</Text></View>
  79. <TouchableHighlight onPress={() => this._delRowData()} style={styles.button} underlayColor="#a5a5a5">
  80. <Text>删除第一行</Text>
  81. </TouchableHighlight>
  82. <TouchableHighlight onPress={() => this._addData()} style={styles.button} underlayColor="#a5a5a5">
  83. <Text>增加数据</Text>
  84. </TouchableHighlight>
  85. <TouchableHighlight onPress={() => this._updateData()} style={styles.button} underlayColor="#a5a5a5">
  86. <Text>修改数据</Text>
  87. </TouchableHighlight>
  88. <TouchableHighlight onPress={() => this._readAllData()} style={styles.button} underlayColor="#a5a5a5">
  89. <Text>读取全部数据</Text>
  90. </TouchableHighlight>
  91.  
  92. <View style={{padding: , marginTop: }}><Text>表2操作</Text></View>
  93. <TouchableHighlight onPress={() => this._addData2()} style={styles.button} underlayColor="#a5a5a5">
  94. <Text>增加数据</Text>
  95. </TouchableHighlight>
  96. <TouchableHighlight onPress={() => this._readAllData2()} style={styles.button} underlayColor="#a5a5a5">
  97. <Text>读取全部数据</Text>
  98. </TouchableHighlight>
  99. </View>
  100. );
  101.  
  102. }
  103. }
  104.  
  105. const styles = StyleSheet.create({
  106. button: {
  107. margin: ,
  108. backgroundColor: 'white',
  109. padding: ,
  110. borderBottomWidth: StyleSheet.hairlineWidth,
  111. borderBottomColor: '#cdcdcd'
  112. },
  113. });

三、如何查看数据文件

笔者是在Genymotion模拟器里测试的

思路是使用 adb 命令 ,先 复制到本地 windows 下,然后用 Realm Studio 打开 realm 文件即可!

复制步骤如下:

1)先连接远程

  1. adb remount

2)查看对应目录下文件

  1. adb ls /data/data/com.testdemo/files

看到结果如下:

000041f9 00001000 5cece0e8 .
000041e9 00001000 5cece048 ..
000041c0 00001000 5cece0e8 default.realm.management
00008180 00316390 5cece0e7 ReactNativeDevBundle.js
00008180 00000498 5cece0fe default.realm.lock
00008180 00004000 5cece0fc default.realm
00001180 00000000 5cece0fc default.realm.note

3)对,没错,然后复制  default.realm  出来就行

  1. adb pull /data/data/com.testdemo/files/default.realm d:/m

注意: com.testdemo   为自己的包名,要对应的修改 。 最后的 d:/m  为 自己要复制的win目录。

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/10935043.html

转载请著名出处!谢谢~~

今日心得:

苦难

[RN] React Native 使用 realm 数据库的更多相关文章

  1. [RN] React Native 实现图片预览

    [RN] React Native 实现图片预览 效果预览: 代码如下: 'use strict'; import React, {Component} from 'react'; import {I ...

  2. [RN] React Native 常见基本问题归纳总结

    [RN] React Native  常见基本问题归纳总结 本问题总结涉及到版本为: "react": "16.8.3","react-native& ...

  3. [RN] React Native 关闭所有黄色警告

    [RN] React Native 关闭所有黄色警告 console.ignoredYellowBox = ['Warning: BackAndroid is deprecated. Please u ...

  4. [RN] React Native 下实现底部标签(支持滑动切换)

    上一篇文章 [RN] React Native 下实现底部标签(不支持滑动切换) 总结了不支持滑动切换的方法,此篇文章总结出 支持滑动 的方法 准备工作之类的,跟上文类似,大家可点击上文查看相关内容. ...

  5. [RN] React Native 幻灯片效果 Banner

    [RN] React Native 幻灯片效果 Banner 1.定义Banner import React, {Component} from 'react'; import {Image, Scr ...

  6. [RN] React Native 常用命令行

    [RN] React Native 常用命令行 1.查看当前版本 react-native --version 或 react-native -v 2.创建指定版本的React Native项目 1) ...

  7. [RN] React Native 实现 类似QQ 登陆页面

    [RN] React Native 实现 类似QQ 登陆页面 一.主页index.js 项目目录下index.js /** * @format */ import {AppRegistry} from ...

  8. [RN] React Native 使用 阿里 ant-design

    React Native 使用 阿里 ant-design 实例效果如图: 一.安装 npm install antd-mobile-rn --save npm install babel-plugi ...

  9. [RN] React Native 获取地理位置

    React Native 获取地理位置 实现原理: 1.用  navigator.geolocation.getCurrentPosition 获取到坐标信息 2.调用 高德地图 接口,解析位置数据 ...

随机推荐

  1. 【Linux命令】Linux压缩及解压命令

    Linux压缩及解压命令 一.文件打包和压缩命令介绍 linux系统文件压缩格式,常用的有*.tar.gz.*.gz.*.zip.*.tar,还有*.rar..7z..bz2..tar.xz..tar ...

  2. HashMap的底层原理(jdk1.7.0_79)

    前言 在Java中我们最常用的集合类毫无疑问就是Map,其中HashMap作为Map最重要的实现类在我们代码中出现的评率也是很高的. 我们对HashMap最常用的操作就是put和get了,那么你知道它 ...

  3. 动画展现十大经典排序算法(附Java代码)

    0.算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序: ...

  4. JDBC解耦案例

    原始JDBC连接 package jdbc; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sq ...

  5. qt 界面去掉系统边框2.0版

    之前的一版存在bug.如果将鼠标放移动到界面内某个可点击的widget上(如:QPushButton)上,按住鼠标左键不放,界面可能会出现界面非预期移动的问题. 那是因为当鼠标移动到可点击的widge ...

  6. Tp5.1开发初入门

    今天需要给金融部门那边做一个信用卡的推广页面,他们系统是用PHP的tp框架做的.我记得最早做tp还是2的时候,和现在的5.1相差太大了,中间开发的时候,还是遇到了点问题.所以,把今天的问题记录下,作个 ...

  7. Java生鲜电商平台-服务器部署设计与架构

    Java生鲜电商平台-服务器部署设计与架构 补充说明:Java开源生鲜电商平台-服务器部署设计与架构,指的是通过服务器正式上线整个项目,进行正式的运营. 回顾整个章节,我们涉及到以下几个方面: 1. ...

  8. FastReport的模板文件frx文件啊怎样打开并编辑修改

    场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  9. python网络编程-1

    1.网络基础 回顾计算IP所处网段方式 #128 64 32 16 8 4 2 1 #IP1 = 192.168.9.1/24 # 11000000 10101000 00001001 0000000 ...

  10. centos通过yum快速安装JDK1.8

    centos通过yum快速安装JDK1.8检索1.8的列表:yum list java-1.8*安装1.8.0的所有文件:yum install java-1.8.0-openjdk* -y 出现 C ...