@ capgo/ 电容- fast- sql
在您的 Capacitor app 中快速运行 SQLite : 查询会通过一个本地的 HTTP 通道而不是桥, 因此大结果集和同步任务保持快速 。 用可选的加密方式替换索引数据库.
🤖 建筑与AI编码代理? 安装 Capgo 技能 所以克劳德代码,代码,光标,副驾驶,或双子座CLI知道如何安装和使用
@capgo/capacitor-fast-sql在您的电容应用程序中:npx skills add Cap-go/capgo-skills。然后问你的经纪人: 加上@capgo/capor-fast-sql到我的Capacitor应用上 代理设置指南 • 妇女 主机磁共振
主要特点
- 快速路径数字 :
connect()打开数据库并启动本地服务器,getServerInfo()返回其端口和直接调用符号. - SQL 组合键数字 :
execute()运行带有参数的语句,加上批量操作. - 交易数字 :
beginTransaction(), (中文(简体) ),commitTransaction()财务报告和审定财务报表rollbackTransaction()。 。 。 . - 加密:通过SQLCipher在iOS和Android上的可选加密数据库.
- 网页数字 :
configureWeb()设置正式的 SQLite Wasm 模块,当您的服务器允许时, OPFS 将持续 . - 平台:iOS,Android和Web. iOS和Android上的原生SQLite,网络上的SQLite Wasm.
为什么是SQL快?
传统的Capacitor插件通过JavaScript桥将数据序列化,随着大型数据集的出现而变得效率低下. Fast SQL通过建立本地的HTTP服务器直接进行本土通信来解决了这个问题,使它成为:
- 本地第一同步系统 (CRDT,业务转换)
- 索引数据库替换 执行中断/受限的平台
- 大型数据集业务 需要高吞吐量
- 批量操作 数以千计的行
- 二进制数据存储 (BLOBs,文档)
文档
这里有最完整的医生: https://capgo.app/docs/plugins/fast-sql/ 互联网档案馆的存檔,存档日期2014-12-21
兼容性
| 插件版本 | 电容兼容性 | 维护 |
|---|---|---|
| 联合国 | 联合国 | ✅ |
| 页:1 | 页:1 | 应要求 |
| 页:1 | 页:1 | ❌ |
| 页:1 | 页:1 | ❌ |
说明: 此插件的主要版本沿用了Capacitor的主要版本. 使用匹配您的 Capacitor 安装的版本( 如 Capacitor 8 的插件 v8) 。 只有最新的主要版本得到积极维护.
安装
您可以使用我们的 AI 辅助设置安装插件 。 使用以下命令将 Capgo 技能添加到您的 AI 工具 :
npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins
然后使用下列提示:
Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-fast-sql` plugin in my project.
如果您更喜欢手动设置,请通过运行以下命令来安装插件,并遵循下面的平台特定指令:
npm install @capgo/capacitor-fast-sql
npx cap sync
概览
此插件直接提供本地的 SQLite 数据库访问权限, 由 : 电容-布洛布写作机. 它不使用Capacitor的标准桥(将数据串行效率低下),而是建立了一个本地的HTTP服务器,用于大数据集和同步操作的最佳性能.
关键特性
- 自定义 HTTP 协议: Bypasses Capacitor 的桥能以大数据达到25x更快的性能
- 直接原生 SQLite: 完整 SQL 支持交易、批量操作和二进制数据
- 同步亲切: 为本地同步系统(CRDT、业务转换等)所设计
- 索引 DB 替换: 为中断/受限的索引数据库执行提供可靠的替代办法
- 横线:iOS、Android和Web(使用 @sqlite.org/sqlite-wasm (英语) 与业务方案融资战略的持久性)
- 可选 RAG 矢量系统: 坚持许多命名的向量存储, 用于回收- 增强生成,而不添加本地依赖性
iOS 配置
此插件运行本地 HTTP 服务器 localhostiOS App Transport Security (ATS) 默认屏蔽清除文本 HTTP, 所以你 必须 允许您的本地网络 Info.plist数字 :
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
这只允许清晰的文本回回回地址( C)localhost 编号 : 127.0.0.1它不会削弱苯丙胺类兴奋剂的外部联系.
Android 配置
此插件运行本地 HTTP 服务器 localhost 绕过Capacitor的桥进行表演. Android 9+ 块 默认的清除文本( 非 HTTPS) 流量, 所以您 必须 允许它 localhost。 。 。 .
备选案文A, 仅限本地主机(建议):
创建 android/app/src/main/res/xml/network_security_config.xml数字 :
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="false">localhost</domain>
<domain includeSubdomains="false">127.0.0.1</domain>
</domain-config>
</network-security-config>
那就在你的书中提及 AndroidManifest.xml数字 :
<application
android:networkSecurityConfig="@xml/network_security_config">
...
</application>
备选案文B, 允许所有清晰文本( 简单但安全性较差 ) :
<application
android:usesCleartextTraffic="true">
...
</application>
加密
机器人
加密用途 SQLCipher 数据 并被选入。 将 SQLCipher 依赖添加到您的 应用程序级 build.gradle数字 :
dependencies {
implementation 'net.zetetic:sqlcipher-android:4.13.0'
}
然后与加密连接启用 :
const db = await FastSQL.connect({
database: 'secure',
encrypted: true,
encryptionKey: 'my-secret-key',
});
如果 SQLCipher 没有安装 encrypted: true ,插件返回清晰的错误消息而不是崩溃.
iOS系统
SQLCipher在iOS上是可选的. 插件没有它会构建; 加密调用会返回 Encryption is not available in this build 除非安装了 SQLCipher .
要通过 CocoaPods 加密, 请更新您的 ios/App/Podfile 之后 capacitor install编号 :cap sync 以使用 SQLCipher 子规格 :
pod 'CapgoCapacitorFastSql/SQLCipher', :path => '../../node_modules/@capgo/capacitor-fast-sql'
然后运行 pod install 输入 ios/App 目录。 如果您跳过此子规格, 请保留 encrypted: false。 。 。 .
网络平台
在网络上, 此插件使用正式 @sqlite.org/sqlite-wasm (英语) 与 财务处 坚持不懈 SQLite 直接读取并写入数据库文件,它并没有被完全装入RAM或通过索引数据库镜像.
OPFS要工作,您的网络服务器必须发送 Cross-Origin 孤立头:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
与 Vite 连接 :
import { defineConfig } from 'vite';
export default defineConfig({
server: {
headers: {
'Cross-Origin-Opener-Policy': 'same-origin',
'Cross-Origin-Embedder-Policy': 'require-corp',
},
},
optimizeDeps: {
exclude: ['@sqlite.org/sqlite-wasm'],
},
});
可选的网络配置( 第一次访问前) connect():
import { CapgoCapacitorFastSql, FastSQL } from '@capgo/capacitor-fast-sql';
await CapgoCapacitorFastSql.configureWeb({
useOpfs: true,
});
const db = await FastSQL.connect({ database: 'myapp' });
configureWeb() 是iOS和Android上的禁用程序 无条件打电话是安全的.
说明: 以前由 sql.js 存储在索引数据库中的现有数据库不会被自动迁移. 必要时在升级后重新播种或导入数据.
使用量
基本示例
import { FastSQL } from '@capgo/capacitor-fast-sql';
// Connect to database
const db = await FastSQL.connect({ database: 'myapp' });
// Create table
await db.execute(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
)
`);
// Insert data
const result = await db.run(
'INSERT INTO users (name, email) VALUES (?, ?)',
['John Doe', '[email protected]']
);
console.log('Inserted row ID:', result.insertId);
// Query data
const users = await db.query('SELECT * FROM users WHERE name LIKE ?', ['John%']);
console.log('Users:', users);
// Close connection
await FastSQL.disconnect('myapp');
交易示例
const db = await FastSQL.connect({ database: 'myapp' });
try {
await db.transaction(async (tx) => {
await tx.run('INSERT INTO accounts (name, balance) VALUES (?, ?)', ['Alice', 1000]);
await tx.run('INSERT INTO accounts (name, balance) VALUES (?, ?)', ['Bob', 500]);
await tx.run('UPDATE accounts SET balance = balance - 100 WHERE name = ?', ['Alice']);
await tx.run('UPDATE accounts SET balance = balance + 100 WHERE name = ?', ['Bob']);
});
console.log('Transaction successful!');
} catch (error) {
console.error('Transaction failed:', error);
}
批量操作
const db = await FastSQL.connect({ database: 'myapp' });
const results = await db.executeBatch([
{ statement: 'INSERT INTO logs (message) VALUES (?)', params: ['Log 1'] },
{ statement: 'INSERT INTO logs (message) VALUES (?)', params: ['Log 2'] },
{ statement: 'INSERT INTO logs (message) VALUES (?)', params: ['Log 3'] },
]);
关键值存储(以移动为重点的)
import { KeyValueStore } from '@capgo/capacitor-fast-sql';
const kv = await KeyValueStore.open({
database: 'myapp',
encrypted: true,
encryptionKey: 'super-secret-key',
});
await kv.set('session', { token: 'abc123', expiresAt: 1710000000 });
const session = await kv.get('session');
await kv.remove('session');
RAG 矢量存储器(可选)
FastSQLVectorStore 提供不受依赖的矢量相容辅助器 @react-native-rag/op-sqlite。它将嵌入到 SQLite 中作为二进制 Float32 向量存储,并在 TypeScript 中计算同位素相似性,所以它在这个插件工作的任何地点都有效.
每个商店都由 store 选项,因此一个数据库可以按需要持有尽可能多的独立矢量存储:
import { FastSQLVectorStore } from '@capgo/capacitor-fast-sql';
const docs = await FastSQLVectorStore.open({
database: 'rag',
store: 'docs',
embeddings,
});
const tickets = await FastSQLVectorStore.open({
database: 'rag',
store: 'tickets',
embeddings,
});
await docs.add({
document: 'Capgo ships instant updates for Capacitor apps.',
metadata: { source: 'docs' },
});
const results = await docs.query({
queryText: 'How do instant updates work?',
nResults: 3,
});
await docs.close();
await tickets.close();
您也可以使用没有嵌入提供者的预计算嵌入:
const store = await FastSQLVectorStore.open({
database: 'rag',
store: 'offline-embeddings',
embeddingDimension: 384,
});
await store.add({
id: 'intro',
document: 'Local RAG entry',
embedding: [0.12, 0.08, 0.31 /* ...384 values */],
});
const matches = await store.query({
queryEmbedding: [0.11, 0.09, 0.29 /* ...384 values */],
nResults: 5,
});
注:网页支持仅用于最小测试。 主要焦点是iOS/Android.
API 密码
connect(...)disconnect(...)getServerInfo(...)execute(...)beginTransaction(...)commitTransaction(...)rollbackTransaction(...)getPluginVersion()configureWeb(...)- 接口
- 类型异名
- 数字
用于高性能 SQLite 数据库访问的快速 SQL 插件 .
此插件使用基于 HTTP 的自定义协议来高效传输数据 , 绕过Capacitor的标准桥,以配合同步操作提高性能.
连接(...)
connect(options: SQLConnectionOptions) => Promise<{ port: number; token: string; database: string; persistent?: boolean; binaryProtocolVersion?: number; }>
初始化数据库连接并启动 HTTP 服务器 .
| 参数 | 类型 | 说明 |
|---|---|---|
options | SQLConnectionOptions | - 连接选项 |
回返情况: Promise<{ port: number; token: string; database: string; persistent?: boolean; binaryProtocolVersion?: number; }>
自: 0.0.1 资源
断开(...)
disconnect(options: { database: string; }) => Promise<void>
关闭数据库连接并停止HTTP服务器.
| 参数 | 类型 | 说明 |
|---|---|---|
options | { database: string; } | - 关闭数据库名称 |
自: 0.0.1 资源
获取ServerInfo(...)
getServerInfo(options: { database: string; }) => Promise<{ port: number; token: string; persistent?: boolean; binaryProtocolVersion?: number; }>
获取 HTTP 服务器端口和指使符进行直接通信.
| 参数 | 类型 | 说明 |
|---|---|---|
options | { database: string; } | - 数据库名称 |
回返情况: Promise<{ port: number; token: string; persistent?: boolean; binaryProtocolVersion?: number; }>
自: 0.0.1 资源
执行(...)
execute(options: { database: string; statement: string; params?: SQLValue[]; }) => Promise<SQLResult>
通过 Capacitor 桥执行 SQL 查询(用于简单的查询) . 为了在大型数据集中更好的性能,直接通过SQLConnection类使用HTTP协议.
| 参数 | 类型 | 说明 |
|---|---|---|
options | { database: string; statement: string; params?: SQLValue[]; } | - 查询参数 |
回返情况: Promise<SQLResult>
自: 0.0.1 资源
开始交易(...)
beginTransaction(options: { database: string; isolationLevel?: IsolationLevel; }) => Promise<void>
开始数据库交易 .
| 参数 | 类型 | 说明 |
|---|---|---|
options | { database: string; isolationLevel?: IsolationLevel; } | - 交易选项 |
自: 0.0.1 资源
执行交易(...)
commitTransaction(options: { database: string; }) => Promise<void>
提交当前交易 .
| 参数 | 类型 | 说明 |
|---|---|---|
options | { database: string; } | - 数据库名称 |
自: 0.0.1 资源
回滚变换(...)
rollbackTransaction(options: { database: string; }) => Promise<void>
倒转当前交易.
| 参数 | 类型 | 说明 |
|---|---|---|
options | { database: string; } | - 数据库名称 |
自: 0.0.1 资源
获取 PluginVersion ()
getPluginVersion() => Promise<{ version: string; binaryProtocolVersion?: number; }>
获取本地 Capacitor 插件版本 .
回返情况: Promise<{ version: string; binaryProtocolVersion?: number; }>
自: 0.0.1 资源
配置Web (...)
configureWeb(config: WebConfig) => Promise<void>
为正式的SQLite Wasm模块配置网络专用选项.
叫这个 在此之前 首个 connect() 如果您需要禁用 OPFS 调用
或提供定制工人。 这种方法是iOS和Android上的禁用.
| 参数 | 类型 | 说明 |
|---|---|---|
config | WebConfig | - 网页配置选项 |
自: 0.0.1 资源
接口
SQLC 选项
数据库连接选项
| Prop | 类型 | 说明 | 默认 | 自兹 |
|---|---|---|---|---|
transport | NativeSQLTransport | 原生HTTP数据编码. 二进制 v1 发送 BLOB 作为原始字节没有基数64. Opt-in on iOS/Android;需要本地插件来广告二进制 v1. JSON仍然是默认的. 二进制是实验性的;只在设备性能和相容性测试之后的将来主机中重新考虑默认. 没有失败的写入会在另一个传输上重试 . | 'http-json' | |
database | string | 数据库名称( 文件将在 app 数据目录中创建) | ||
encrypted | boolean | 启用加密( 只有iOS/ Android) | ||
encryptionKey | string | 加密密钥( 如果加密为真实则需要) | ||
readOnly | boolean | 打开现有的本地数据库只读 。 写入和缺失文件打开失败 。 WAL 模式更改会跳过只读连接 。 Web Worker 传输拒绝此选项, 而不是默开可写 . | ||
walMode | boolean | 启用 WAL( Write-Ahead Digging) 日记模式, 以便更好的货币和性能 。 执行 PRAGMA journal_mode = WAL 在打开数据库后立即打开. | 8.0.49 (中文(简体) ) | |
performancePresets | boolean | 打开数据库后应用推荐的 SQLite 性能 PRAGMAs : synchronous = NORMAL, (中文(简体) ), busy_timeout = 5000, (中文(简体) ), cache_size = -2000,以及 foreign_keys = ON。 。 。 . | 8.0.49 (中文(简体) ) |
SQL 结果
SQL 查询执行的结果
| Prop | 类型 | 说明 |
|---|---|---|
rows | SQLRow[] | 通过查询返回行( 对于 SELECT 语句) |
rowsAffected | number | 受查询影响的行数(对于INSERT/UPDATE/DELETE) |
insertId | number | 最后一个插入行的ID(用于自动递增的INSERT语句) |
SQLRow 图像
SQL 行结果 - 按列名索引的值
Uint8 阵列
一个8位无符号整数的打出数组。 内容初始化为0. 如果 无法分配请求的字节数 .
| Prop | 类型 | 说明 |
|---|---|---|
BYTES_PER_ELEMENT | number | 数组中每个元素的字节大小. |
buffer | ArrayBufferLike | 这个 矩阵缓冲 实例. |
byteLength | number | 数组的字节长度 . |
byteOffset | number | 数组的字节相抵. |
length | number | 数组的长度 . |
| 方法 | 签署 | 说明 |
|---|---|---|
| 复制时间 | (目标:数量,开始:数量,结束?:数量:qq未定义) =>此 | 复制开始和结束所识别的数组的一部分, 从位置目标开始返回到相同的数组后返回此对象 |
| 每个 | (数值:数字,指数:数字,数组: Uint8 阵列未知,这个Arg | 确定一个数组的所有成员是否都满足指定的测试. |
| 填满 | (数值:数字,起始数?:数字:qq未定义,结束?:数字:qq未定义)=>此 | 填入以数值开始和结束的段落后返回此对象 |
| 过滤器 | (数值:数字,指数:数字,数组: Uint8 阵列任何,这个Arg Uint8 阵列 | 返回符合召回函数中指定条件的数组元素. |
| 寻找 | (数值:数字,指数:数字,obj: Uint8 阵列)"布尔",此Arg?:有)"QQ"数字未定义" | 返回数组中第一个元素的数值,其中上游是真实的,而未另作定义. |
| 查找Index 数据 | (数值:数字,指数:数字,obj: Uint8 阵列- 布尔,这个Arg | 返回数组中第一个元素的索引,其中上游为真,否则为 -1. |
| 每个 | (召回fn:(数值:数字,索引:数字,数组:) Uint8 阵列虚空,这个Arg? 无效 | 为数组中的每个元素执行指定的动作. |
| 索引 | (搜索元素:号码,来自Index?:号码QQ未定义)QQ号码 | 返回数组中第一个值的索引. |
| 加入时 | (分隔符?:字符串 qq未定义) qq字符串 | 添加由指定的分隔符字符串分隔的数组的所有元素. |
| 最后一个 索引 | (搜索元素:号码,来自Index?:号码QQ未定义)QQ号码 | 返回数组中最后一个值出现的索引. |
| 地图 | (召回fn:(数值:数字,索引:数字,数组:) Uint8 阵列号码,这个Arg Uint8 阵列 | 在一个数组的每个元素上调用定义的回调函数,并返回包含结果的数组. |
| 减少 | (召回: (上一个数值: 数字, 当前数值: 数字, 当前索引: 数字, 数组 :) Uint8 阵列) qq号码 qq号码 | 为数组中的所有元素调用指定的调用函数。 召回函数的返回值是累积结果,在召回函数的下个调取中作为参数提供. |
| 减少 | (召回: (上一个数值: 数字, 当前数值: 数字, 当前索引: 数字, 数组 :) Uint8 阵列) QQ数字,初等值: 数字 QQ数字 | |
| 减少 | <U>(召回: (先前的值: U, 当前值: 数, 当前Index: 数, 数组 :) Uint8 阵列)"U","初华":"U" | 为数组中的所有元素调用指定的调用函数。 召回函数的返回值是累积结果,在召回函数的下个调取中作为参数提供. |
| 减少右边 | (召回: (上一个数值: 数字, 当前数值: 数字, 当前索引: 数字, 数组 :) Uint8 阵列) qq号码 qq号码 | 调用一个数组中所有元素的指定调用函数, 按下行顺序。 召回函数的返回值是累积结果,在召回函数的下个调取中作为参数提供. |
| 减少右边 | (召回: (上一个数值: 数字, 当前数值: 数字, 当前索引: 数字, 数组 :) Uint8 阵列) QQ数字,初等值: 数字 QQ数字 | |
| 减少右边 | <U>(召回: (先前的值: U, 当前值: 数, 当前Index: 数, 数组 :) Uint8 阵列)"U","初华":"U" | 调用一个数组中所有元素的指定调用函数, 按下行顺序。 召回函数的返回值是累积结果,在召回函数的下个调取中作为参数提供. |
| 倒转 | (单位:千美元) Uint8 阵列 | 反转矩阵中的元素. |
| 设定 | (阵列 : 矩阵类似< 数字> , 偏移 ? : 数字 qq 未定义 qq 无效 | 设置一个值或数组值. |
| 切开 | (开始? :数字qq未定义,结束?:数字qq未定义)qq Uint8 阵列 | 返回数组的一节. |
| 有点 | (数值:数字,指数:数字,数组: Uint8 阵列未知,这个Arg | 确定指定的召回函数是否为数组中的任何元素返回真实. |
| 排序 | (比较Fn?): ((a: 数字,b: 数字) * * * * * 数字) * * * 未定义) * * * * * * | 排序数组. |
| 子阵列 | (开始?):数字qq未定义,结束?:数字qq未定义)qq Uint8 阵列 | 获得新的 Uint8 阵列 意见 矩阵缓冲 存储此数组,并引用起始、包含、上至结尾、独有的元素. |
| 转到本地结构 | () qq 字符串 | 使用当前语言将数字转换为字符串. |
| 倒数 | () qq 字符串 | 返回数组的字符串表示式. |
| 值 | (单位:千美元) Uint8 阵列 | 返回指定对象的原始值. |
矩阵类似
| Prop | 类型 |
|---|---|
length | number |
矩阵缓冲键
允许 矩阵缓冲 arrayBufferView 和相关类型矩阵的缓冲类型.
| Prop | 类型 |
|---|---|
ArrayBuffer | ArrayBuffer |
矩阵缓冲
代表二进制数据的原始缓冲,用于存储数据 不同键入数组。 无法直接读取或写入矩阵缓冲器, 但是可以传递到一个被键入的数组或 DataView 对象来解释原始 视需要进行缓冲.
| Prop | 类型 | 说明 |
|---|---|---|
byteLength | number | 唯相读取. 长度 矩阵缓冲 (以字节表示). |
| 方法 | 签署 | 说明 |
|---|---|---|
| 切开 | (开始:数字,结束? 数字:没有定义) 矩阵缓冲 | 返回 a 的一节 矩阵缓冲。 。 。 . |
网络配置
官方SQLite Wasm模块的Web平台配置.
使用方式 configureWeb() 第一次选举之前 connect()。 。 。 .
OPFS的持久性需要您网络服务器上的 Cross-Origin 隔离头:
Cross-Origin-Opener-Policy: same-origin 财务报告和审定财务报表
Cross-Origin-Embedder-Policy: require-corp。 。 。 .
| Prop | 类型 | 说明 | 默认 |
|---|---|---|---|
useOpfs | boolean | 偏好通过 Web Worker( 默认 ) 选择 OPFS 持久性 : true) (中文(简体) ). 当 OPFS 不可用时,插件会倒回非持久性数据库并记录一个警告. | true |
requirePersistence | boolean | 拒绝网络连接, 除非工人确认持续存储 。 兼容性默认为虚假 。 考虑在下一个Capacitor主要课程中要求默认持续,而不是改变未成年人的倒置行为. | false |
worker | SqliteWebWorker | SQLite Wasm 的自定义工人实例或工厂。 高级: 覆盖默认工人 @sqlite.org/sqlite-wasm。 。 。 . |
类型异名
本地SQL 运输
原生HTTP数据编码. JSON仍然是兼容默认.
'http-json' | 'http-binary'
质量
插件支持的 SQL 值类型
string | number | boolean | null | Uint8Array
矩阵缓冲像
ArrayBufferTypes[keyof ArrayBufferTypes]
Sqlite 网络工人
浏览器 Worker 实例或返回一个的厂家 . 曾经覆盖默认的 SQLite Wasm 工人 .
Worker | (() => Worker)
数字
隔离级别
| 成员 | 数值 |
|---|---|
ReadUncommitted | 'READ UNCOMMITTED' |
ReadCommitted | 'READ COMMITTED' |
RepeatableRead | 'REPEATABLE READ' |
Serializable | 'SERIALIZABLE' |