You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在React Native中使用SQLCipher创建加密数据库的技术求助

使用Dryganet的SQLCipher分支在React Native中创建加密数据库指南

刚接触React Native又要搞加密数据库确实有点懵,我来给你一步步捋清楚怎么用这个分支搭建加密数据库:

1. 安装指定分支

首先得把这个带SQLCipher的分支安装到你的项目里,用npm或者yarn都可以,执行下面的命令:

# npm 安装
npm install github:dryganets/react-native-sqlite-storage#sergeyd/sqlite-cipher --save

# 或者 yarn 安装
yarn add github:dryganets/react-native-sqlite-storage#sergeyd/sqlite-cipher

2. 链接原生模块(RN 0.60+ 自动链接,但需额外操作)

  • iOS端:进入项目的ios目录,执行pod install来安装SQLCipher相关的依赖,这个分支已经把SQLCipher集成进去了,不用额外手动加。
  • Android端:RN 0.60+ 会自动链接,一般不需要额外配置,但如果遇到编译错误,可以检查android/app/build.gradle里有没有自动添加的依赖,或者清理一下gradle缓存试试。

3. 核心使用示例(加密数据库操作)

这个分支的API和原react-native-sqlite-storage基本一致,核心区别就是打开数据库时多了个password参数用来设置加密密钥,直接看代码示例:

import SQLite from 'react-native-sqlite-storage';

// 打开加密数据库
const openEncryptedDB = () => {
  const db = SQLite.openDatabase(
    {
      name: 'my_encrypted_db.db', // 数据库文件名
      location: 'default', // 存储位置,默认即可
      password: 'your_ultra_strong_secret_key', // 你的加密密钥,一定要复杂!
    },
    () => {
      console.log('✅ 加密数据库打开成功');
      createSampleTable(db); // 打开成功后创建示例表
    },
    (error) => {
      console.error('❌ 打开数据库失败:', error);
    }
  );
};

// 创建示例表
const createSampleTable = (db) => {
  db.transaction((tx) => {
    tx.executeSql(
      'CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP)',
      [],
      () => console.log('✅ 示例表创建成功'),
      (tx, error) => {
        console.error('❌ 创建表失败:', error);
        return false; // 回滚事务
      }
    );
  });
};

// 插入数据示例
const insertNote = (db, content) => {
  db.transaction((tx) => {
    tx.executeSql(
      'INSERT INTO notes (content) VALUES (?)',
      [content],
      (tx, results) => {
        console.log(`✅ 数据插入成功,ID: ${results.insertId}`);
      },
      (tx, error) => {
        console.error('❌ 插入数据失败:', error);
        return false;
      }
    );
  });
};

// 查询数据示例
const fetchNotes = (db) => {
  db.transaction((tx) => {
    tx.executeSql(
      'SELECT * FROM notes ORDER BY created_at DESC',
      [],
      (tx, results) => {
        const notes = [];
        for (let i = 0; i < results.rows.length; i++) {
          notes.push(results.rows.item(i));
        }
        console.log('📋 查询到的笔记:', notes);
      },
      (tx, error) => {
        console.error('❌ 查询数据失败:', error);
        return false;
      }
    );
  });
};

// 调用打开数据库的方法
openEncryptedDB();

4. 关键注意事项

  • 密钥安全:绝对不要把加密密钥硬编码在代码里!可以用React Native的Keychain库(比如react-native-keychain)来安全存储密钥,需要的时候再读取。
  • API兼容性:这个分支是基于原react-native-sqlite-storage修改的,所以原库的所有API(事务、增删改查、关闭数据库等)都可以正常使用,你可以参考原库的官方文档来扩展功能。
  • 调试问题:如果遇到编译或运行错误,先检查:
    • iOS端有没有执行pod install,有没有清理Xcode缓存(Product -> Clean Build Folder)
    • Android端有没有同步gradle,有没有清理build文件夹(cd android && ./gradlew clean)

内容的提问来源于stack exchange,提问作者Paradox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:41:30