[RN] React Native 使用 realm 数据库
React Native 使用 realm 数据库
realm 整体的优点有这么四点:
一、安装依赖
- npm i -S realm
Link
- react-native link
二、使用
1)先定义工具文件
RealmUtil.js
- import Realm from 'realm';
- /***表定义区**/
- export const HistoryTableName = 'History';
- export const CityTableName = 'City';
- const HistorySchema = {
- name: HistoryTableName,
- primaryKey: 'id',
- properties: {
- id: 'int',
- name: 'string',
- }
- };
- const CitySchema = {
- name: CityTableName,
- primaryKey: 'city_id',
- properties: {
- city_id: 'int',
- city_name: 'string',
- }
- };
- const instance = new Realm({
- schema: [
- HistorySchema,
- CitySchema,
- ],
- deleteRealmIfMigrationNeeded: true,
- inMemory: false,
- });
- /***表使用区**/
- export function writeToRealm(obj,tabName) {
- return new Promise((resolve, reject) => {
- instance.write(() => {
- instance.create(tabName, obj, true)
- resolve(true)
- })
- })
- }
- export function queryAllFromRealm(tabName) {
- return new Promise((resolve, reject) => {
- let obj = instance.objects(tabName);
- let objStr = JSON.stringify(obj);
- resolve(JSON.parse(objStr))
- })
- }
- export function clearAllFromRealm(tabName) {
- return new Promise((resolve, reject) => {
- instance.write(() => {
- let arrays = instance.objects(tabName);
- instance.delete(arrays);
- resolve(true)
- })
- })
- }
- export function clearRowFromRealm(id,tabName) {
- return new Promise((resolve, reject) => {
- instance.write(() => {
- let arrays = instance.objects(tabName);
- let row = arrays.filtered('id==' + id);
- instance.delete(row);
- resolve(true)
- })
- })
- }
2)调用文件
- import React, {Component} from "react";
- import {StyleSheet, Text, ToastAndroid, TouchableHighlight, View,} from 'react-native';
- import {
- HistoryTableName,
- CityTableName,
- clearAllFromRealm,
- queryAllFromRealm,
- writeToRealm,
- clearRowFromRealm
- } from "./RealmUtil";
- export default class TestRealm extends Component {
- componentWillMount() {
- }
- //表1操作
- _addData() {
- clearAllFromRealm(HistoryTableName);
- let row1 = {"id": , "name": "战狼1"};
- writeToRealm(row1, HistoryTableName).then(() => {
- ToastAndroid.show('写入完成1', ToastAndroid.SHORT);
- });
- let row2 = {"id": , "name": "战狼2"};
- writeToRealm(row2, HistoryTableName).then(() => {
- ToastAndroid.show('写入完成2', ToastAndroid.SHORT);
- });
- }
- _readAllData() {
- queryAllFromRealm(HistoryTableName).then((list) => {
- for (let key in list) {
- ToastAndroid.show('id:' + list[key].id + ',name:' + list[key].name, ToastAndroid.SHORT);
- }
- });
- }
- _updateData() {
- let row2 = {"id": , "name": "北京222"};
- writeToRealm(row2, HistoryTableName).then(() => {
- ToastAndroid.show('修改完成', ToastAndroid.SHORT);
- });
- }
- _delRowData() {
- //删除第一行
- clearRowFromRealm(, HistoryTableName).then(() => {
- ToastAndroid.show('删除完成', ToastAndroid.SHORT);
- });
- }
- //表2操作
- _addData2() {
- clearAllFromRealm(CityTableName);
- let row1 = {"city_id": , "city_name": "上海"};
- writeToRealm(row1, CityTableName).then(() => {
- ToastAndroid.show('2写入完成1', ToastAndroid.SHORT);
- });
- let row2 = {"city_id": , "city_name": "北京"};
- writeToRealm(row2, CityTableName).then(() => {
- ToastAndroid.show('2写入完成2', ToastAndroid.SHORT);
- });
- }
- _readAllData2() {
- queryAllFromRealm(CityTableName).then((list) => {
- for (let key in list) {
- ToastAndroid.show('城市ID:' + list[key].city_id + ',城市名:' + list[key].city_name, ToastAndroid.SHORT);
- }
- });
- }
- render() {
- return (
- <View style={{flex: }}>
- <View style={{padding: }}><Text>表1操作</Text></View>
- <TouchableHighlight onPress={() => this._delRowData()} style={styles.button} underlayColor="#a5a5a5">
- <Text>删除第一行</Text>
- </TouchableHighlight>
- <TouchableHighlight onPress={() => this._addData()} style={styles.button} underlayColor="#a5a5a5">
- <Text>增加数据</Text>
- </TouchableHighlight>
- <TouchableHighlight onPress={() => this._updateData()} style={styles.button} underlayColor="#a5a5a5">
- <Text>修改数据</Text>
- </TouchableHighlight>
- <TouchableHighlight onPress={() => this._readAllData()} style={styles.button} underlayColor="#a5a5a5">
- <Text>读取全部数据</Text>
- </TouchableHighlight>
- <View style={{padding: , marginTop: }}><Text>表2操作</Text></View>
- <TouchableHighlight onPress={() => this._addData2()} style={styles.button} underlayColor="#a5a5a5">
- <Text>增加数据</Text>
- </TouchableHighlight>
- <TouchableHighlight onPress={() => this._readAllData2()} style={styles.button} underlayColor="#a5a5a5">
- <Text>读取全部数据</Text>
- </TouchableHighlight>
- </View>
- );
- }
- }
- const styles = StyleSheet.create({
- button: {
- margin: ,
- backgroundColor: 'white',
- padding: ,
- borderBottomWidth: StyleSheet.hairlineWidth,
- borderBottomColor: '#cdcdcd'
- },
- });
三、如何查看数据文件
笔者是在Genymotion模拟器里测试的
思路是使用 adb 命令 ,先 复制到本地 windows 下,然后用 Realm Studio 打开 realm 文件即可!
复制步骤如下:
1)先连接远程
- adb remount
2)查看对应目录下文件
- 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 出来就行
- 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 数据库的更多相关文章
- [RN] React Native 实现图片预览
[RN] React Native 实现图片预览 效果预览: 代码如下: 'use strict'; import React, {Component} from 'react'; import {I ...
- [RN] React Native 常见基本问题归纳总结
[RN] React Native 常见基本问题归纳总结 本问题总结涉及到版本为: "react": "16.8.3","react-native& ...
- [RN] React Native 关闭所有黄色警告
[RN] React Native 关闭所有黄色警告 console.ignoredYellowBox = ['Warning: BackAndroid is deprecated. Please u ...
- [RN] React Native 下实现底部标签(支持滑动切换)
上一篇文章 [RN] React Native 下实现底部标签(不支持滑动切换) 总结了不支持滑动切换的方法,此篇文章总结出 支持滑动 的方法 准备工作之类的,跟上文类似,大家可点击上文查看相关内容. ...
- [RN] React Native 幻灯片效果 Banner
[RN] React Native 幻灯片效果 Banner 1.定义Banner import React, {Component} from 'react'; import {Image, Scr ...
- [RN] React Native 常用命令行
[RN] React Native 常用命令行 1.查看当前版本 react-native --version 或 react-native -v 2.创建指定版本的React Native项目 1) ...
- [RN] React Native 实现 类似QQ 登陆页面
[RN] React Native 实现 类似QQ 登陆页面 一.主页index.js 项目目录下index.js /** * @format */ import {AppRegistry} from ...
- [RN] React Native 使用 阿里 ant-design
React Native 使用 阿里 ant-design 实例效果如图: 一.安装 npm install antd-mobile-rn --save npm install babel-plugi ...
- [RN] React Native 获取地理位置
React Native 获取地理位置 实现原理: 1.用 navigator.geolocation.getCurrentPosition 获取到坐标信息 2.调用 高德地图 接口,解析位置数据 ...
随机推荐
- 【Linux命令】Linux压缩及解压命令
Linux压缩及解压命令 一.文件打包和压缩命令介绍 linux系统文件压缩格式,常用的有*.tar.gz.*.gz.*.zip.*.tar,还有*.rar..7z..bz2..tar.xz..tar ...
- HashMap的底层原理(jdk1.7.0_79)
前言 在Java中我们最常用的集合类毫无疑问就是Map,其中HashMap作为Map最重要的实现类在我们代码中出现的评率也是很高的. 我们对HashMap最常用的操作就是put和get了,那么你知道它 ...
- 动画展现十大经典排序算法(附Java代码)
0.算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序: ...
- JDBC解耦案例
原始JDBC连接 package jdbc; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sq ...
- qt 界面去掉系统边框2.0版
之前的一版存在bug.如果将鼠标放移动到界面内某个可点击的widget上(如:QPushButton)上,按住鼠标左键不放,界面可能会出现界面非预期移动的问题. 那是因为当鼠标移动到可点击的widge ...
- Tp5.1开发初入门
今天需要给金融部门那边做一个信用卡的推广页面,他们系统是用PHP的tp框架做的.我记得最早做tp还是2的时候,和现在的5.1相差太大了,中间开发的时候,还是遇到了点问题.所以,把今天的问题记录下,作个 ...
- Java生鲜电商平台-服务器部署设计与架构
Java生鲜电商平台-服务器部署设计与架构 补充说明:Java开源生鲜电商平台-服务器部署设计与架构,指的是通过服务器正式上线整个项目,进行正式的运营. 回顾整个章节,我们涉及到以下几个方面: 1. ...
- FastReport的模板文件frx文件啊怎样打开并编辑修改
场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- python网络编程-1
1.网络基础 回顾计算IP所处网段方式 #128 64 32 16 8 4 2 1 #IP1 = 192.168.9.1/24 # 11000000 10101000 00001001 0000000 ...
- 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 ...