原文写于个人博客,欢迎关注www.xiaolewei.com
前言
最近在使用React Native写一个密码管理的软件。加密后的密码准备使用SQLite进行存储,在Github上看了一下,react-native-sqlite-storage这个包是Star最高的一个。所以就选这个了,并且特记录一下整个整合工作。
配置-IOS
首先在RN的根目录下安装sqlite的包:
npm install --save react-native-sqlite-storage
然后进行link
rnpm link
rnpm 即 React Native Package Manager,是react native的专门的包管理工具。
如果还没有安装过rnpm或者link报错,可以尝试一下命令:
npm -g install rnpm xcode
通常情况经过上述两步即可完成依赖的配置工作。当然官方还提供了使用pod以及手动link的教程,由于比较繁琐这里不赘述了,留个传送门
配置-Android
同上首先下载安装包:
npm install --save react-native-sqlite-storage
然后进入android子目录,在setting.gradle文件的include ':app'上面一行添加:
include ':react-native-sqlite-storage'
project(':react-native-sqlite-storage').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sqlite-storage/src/android')
再在app/build.gradle文件的dependencies中添加:
dependencies {
    ...
    compile project(':react-native-sqlite-storage')
}
最后在app/src/java/com/[项目名]/MainApplication.java文件中添加修改成如下内容:
    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          new SQLitePluginPackage()
      );
    }
至此Android端的配置也完成了。
使用
在index.ios.js和index.android.js中添加
import SQLite from 'react-native-sqlite-storage';
SQLite.DEBUG(true);
SQLite.enablePromise(true);
这样添加的好处是可以将SQLite作为一个全局对象去使用。包括数据库的打开、连接等操作均可以这么处理。
SQLite.openDatabase({name: 'my.db', location: 'default'}, successcb, errorcb);
在Android下,由于数据库文件位于固定位置,所以location参数是无效的。
在IOS下,location有以下3个可选参数:分别为
- default:数据文件会放置在- Library/LocalDatabase子目录下,对iTunes不可见,也不会被iCloud备份
- Library:数据文件会放置在- Library子目录下,对iTunes不可见,但是会iCloud备份
- Documents:数据文件会放置在- Library子目录下,对iTunes可见,同时会iCloud备份
剩下的就是关于SQLite的一些常规操作,不再赘述。