更新记录

1.0.1(2026-07-28)


平台兼容性

uni-app(3.99)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟

其他

多语言 暗黑模式 宽屏模式

CSIS SQLCipher

简介

CSIS SQLCipher 是面向 uni-app App-Android 的 UTS 原生插件,基于 SQLCipher 4 提供加密 SQLite 数据库的打开、查询、执行和关闭能力。插件适用于 CSIS Pad 的本地数据存储与备份导入场景。

支持范围

  • 平台:uni-app App-Android
  • Android 最低版本:API 23
  • 数据库引擎:net.zetetic:sqlcipher-android:4.17.0
  • 需要使用自定义基座或正式原生构建,普通 H5、微信小程序和 iOS 不支持

安装与构建

将插件放置在项目的 src/uni_modules/csis-sqlcipher/ 目录下,并在 HBuilderX 中重新运行自定义基座或重新打包 App。修改 utssdk/app-android 下的原生文件后,必须重新编译原生基座才会生效。

快速开始

import {
  closeDatabase,
  executeSql,
  isOpenDatabase,
  openDatabase,
  selectSql
} from '@/uni_modules/csis-sqlcipher'

const database = {
  name: 'app_data.db',
  path: plus.io.convertLocalFileSystemURL('_doc/app_data.db')
}

openDatabase({
  ...database,
  integrityCheck: true,
  success() {
    console.log('数据库打开成功')
  },
  fail(error) {
    console.error('数据库打开失败', error.errMsg)
  }
})

selectSql({
  ...database,
  sql: 'SELECT * FROM user_info',
  success(rows) {
    console.log(rows)
  }
})

executeSql({
  ...database,
  sql: 'PRAGMA foreign_keys = ON',
  success() {
    console.log('SQL 执行成功')
  }
})

closeDatabase({
  name: database.name,
  success() {
    console.log('数据库已关闭')
  }
})

API

openDatabase(options)

打开已有的 SQLCipher 数据库。数据库文件必须存在,插件不会通过错误密钥创建可用数据库。

参数 类型 必填 说明
name string 连接标识,后续查询、执行和关闭时必须一致
path string 数据库绝对路径
integrityCheck boolean 是否执行 SQLCipher 完整性校验
success () => void 打开成功回调
fail (error) => void 打开失败回调
complete (result) => void 完成回调

selectSql(options)

selectSql({
  name: database.name,
  sql: 'SELECT id, name FROM user_info',
  success(rows) {},
  fail(error) {}
})

查询成功时,success 接收行数组;失败时,error.errMsg 包含原生错误信息。

executeSql(options)

用于执行 INSERTUPDATEDELETECREATE TABLE 等非查询 SQL。

isOpenDatabase(options)

同步返回指定数据库连接是否处于打开状态:

const opened = isOpenDatabase(database)

closeDatabase(options)

关闭指定连接。关闭后再次查询前需要重新调用 openDatabase

配置数据库名称

数据库名称和路径由调用 openDatabase 时传入的 namepath 决定。name 是连接标识,path 才是实际文件位置;建议两者使用相同的文件名,且同一个 name 始终对应同一个绝对路径。

例如,打开 _doc/customer.db

const database = {
  name: 'customer.db',
  path: plus.io.convertLocalFileSystemURL('_doc/customer.db')
}

openDatabase({
  ...database,
  success() {},
  fail(error) {
    console.error(error.errMsg)
  }
})

项目若通过 src/utils/db.js 统一管理数据库文件名,只需修改该文件的 DATABASE_NAME,导入、备份和打开逻辑会随之使用新名称。

配置 DATABASE_KEY 密码

当前密码由 Android 原生文件 utssdk/app-android/SqlCipherNative.kt 中的 DATABASE_KEY 常量控制,不需要也不应从 JavaScript 传入。可以替换为自己的高强度随机密码:

object SqlCipherNative {
    private const val DATABASE_KEY = "MyNewStrongKey_2026!"
}

修改密码后,旧数据库不能再使用新密码打开,必须使用新密码重新加密数据库。若使用项目内的 reencrypt-mobile-data.ps1,同步修改其中的 ATTACH DATABASE ... KEY

ATTACH DATABASE "$targetSqlPath" AS encrypted KEY 'MyNewStrongKey_2026!';

然后执行脚本重新生成加密数据库,并重新构建自定义基座或正式 App,使 Kotlin 中的 DATABASE_KEY 生效。数据库名称的修改不会改变密钥;密码的修改必须同时更新原生常量和数据库生成流程。

加密兼容性

插件采用 SQLCipher 4 默认兼容参数:AES-256、页大小 4096、KDF 迭代次数 256000、HMAC 开启。使用桌面 SQLCipher 或其他插件生成数据库时,必须使用完全一致的密钥和参数;仅修改文件名不会改变数据库加密格式。

注意事项

  • 数据库操作是异步的,请在 successcomplete 回调中继续后续流程。
  • 同一个 name 应始终对应同一个绝对路径。
  • 原生插件代码或依赖变更后,必须重新构建自定义基座;旧基座不会包含最新 Kotlin/SQLCipher 代码。
  • DATABASE_KEY 写在原生代码中,仅适合内部项目使用;正式发布前应改为 Android Keystore 等安全的密钥管理方案。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无。本插件仅操作应用沙盒内的本地加密数据库,不申请相机、定位、存储、网络等系统权限。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

本插件不采集、不存储、不上传任何用户数据,也不向任何服务器发送数据。插件仅在 Android 应用沙盒内使用 SQLCipher 对本地 SQLite 数据库进行加密、打开、查询、写入、关闭及备份导入操作。数据库内容仅由使用本插件的应用自行管理。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无。本插件不包含任何广告,不展示广告内容,也不集成任何广告 SDK。

暂无用户评论。