x-sqlite-s
简介
x-sqlite-s 是一个用于 uni-appx 的 SQLite 数据库操作插件,支持基本的数据库。
兼容性
Harmony | IOS | Android | WEB | 小程序 |
---|---|---|---|---|
支持 | 支持 | 支持 | 支持 | x |
安装
在插件市场搜索并导入 x-sqlite-s 插件。
特别注意
配置中的密码等加密功能,未实现,只是一个预设功能.
web注意事项
请到插件目录内复制static到你的根目录static即可。否则web无法使用。
类型定义
SQLiteConfig 配置项
鸿蒙不支持自定义其它目录为了全平台兼容,不建议设置defaultDirectory, 在安卓和ios中defaultDirectory它可指定为缓存目录,下载目录,用户目录等等沙盒目录。 但鸿蒙它是固定在应用目录/rdb/自定义目录
,下,因为实际上是被固定在了应用目录/rdb/
下. 因此差异非常大。故,鸿蒙端defaultDirectory我将不会生效。仅在安卓和ios下生效。就算你写了我也不使用。
typescript
type SQLiteConfig = {
password?: string; // 数据库密码
encryption?: boolean; // 是否启用加密
defaultDirectory?: string; // 数据库文件存储目录,鸿蒙不支持,它的目录是固定的加密区目录,无法像安卓,ios那样保存到其它目录:比如用户目录,缓存目录等。
locateFile?: (filename: string) => string; // 自定义文件位置,web专用属性,默认内置
}
SQLiteResult 返回结果
typescript
type SQLiteResult = {
rows?: any[][]; // 查询结果行数据
columns?: string[]; // 列名
maps?: any[]; // 查询结果对象数组,可通过列名访问数据
changes?: number; // 影响的行数
lastInsertRowid?: number; // 最后插入的行ID
error?: string; // 错误信息
}
SQLiteExecuteBatchParams 批量执行参数
typescript
type SQLiteExecuteBatchParams = {
sql: string; // SQL语句
params?: any[]; // 参数列表
}
API 说明
创建数据库
javascript
createDb(filename?: string): boolean
// web端是Promise函数,执行时可以await createDb
// app是同步操作,不是Promise
创建或打开一个数据库。如果未指定文件名,默认为 "sqlite.db"。
执行SQL查询
javascript
run(sql: string, params: any[] = []): SQLiteResult
执行一条SQL语句,支持参数绑定。
查询数据
javascript
query(sql: string, params: any[] = []): SQLiteResult
执行查询语句并返回结果集。
插入数据
javascript
insert(table: string, data: object): SQLiteResult
向指定表插入数据。
更新数据
javascript
update(table: string, data: object, where: string, params: any[] = []): SQLiteResult
更新表中的数据。
删除数据
javascript
delete(table: string, where: string, params: any[] = []): SQLiteResult
删除表中的数据。
事务处理
javascript
beginTransaction(): SQLiteResult // 开始事务
commit(): SQLiteResult // 提交事务
rollback(): SQLiteResult // 回滚事务
批量执行
javascript
executeBatch(statements: SQLiteExecuteBatchParams[]): SQLiteResult[]
批量执行SQL语句,支持事务。
数据库文件管理
createDb,loadFromBuffer,loadLocal三个函数web端是Promise函数app是同步操作,不是Promise
javascript
createDb(filename?: string): boolean // 创建一个本地数据库,重命的重复创建不会覆盖,只是读取已有的数据库.
saveLocal(filename?: string): SQLiteResult // 保存数据库到本地
loadLocal(filename: string): SQLiteResult // 从本地加载数据库
getDatabasePath(): string | null // app端获取数据库备份临时文件路径
getDatabasePath(): Uint8Array | null // web端返回的是二进制数据
loadFromBuffer(buffer: Uint8Array):void // web端专用函数,用来从进制制数据加载远程数据库
setDefaultDirectory(directory: string): void // 设置数据库文件存储目录
setPassword(password: string|null): void // 设置数据库密码,null或空值表示删除密码
表操作
javascript
tableExists(tableName: string): boolean // 检查表是否存在
createTable(tableName: string, columns: UTSJSONObject): SQLiteResult // 创建表
dropTable(tableName: string): SQLiteResult // 删除表
使用示例
基本操作
javascript
import {xSqlite} from "@/uni_modules/x-sqlite-s"
// 创建数据库实例并配置
const db = new xSqlite({
encryption: true,
password: "mypassword",
defaultDirectory: "/custom/db/path"
});
// 创建数据库
db.createDb("mydb");
// 创建表
db.createTable("users", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"name": "TEXT",
"age": "INTEGER"
});
// 插入数据
db.insert("users", {
name: "张三",
age: 25
});
// 查询数据
const result = db.query("SELECT * FROM users WHERE age > ?", [20]);
console.log(result.rows); // 通过数组下标访问:[[1, "张三", 25], [2, "李四", 30]]
console.log(result.maps); // 通过列名访问:[{"id": 1, "name": "张三", "age": 25}, {"id": 2, "name": "李四", "age": 30}]
事务使用
javascript
// 开始事务
db.beginTransaction();
try {
db.insert("users", { name: "李四", age: 30 });
db.insert("users", { name: "王五", age: 35 });
db.commit();
} catch (e) {
db.rollback();
}
批量操作
javascript
const statements = [
{
sql: "INSERT INTO users (name, age) VALUES (?, ?)",
params: ["赵六", 40]
},
{
sql: "UPDATE users SET age = ? WHERE name = ?",
params: [45, "张三"]
}
];
db.executeBatch(statements);
数据库配置管理
javascript
// 更改数据库存储目录
db.setDefaultDirectory("/new/db/path");
// 更新数据库密码
db.setPassword("newpassword");
// 移除数据库密码
db.setPassword(null);
注意事项
- 在进行数据库操作前,确保已经成功创建/打开数据库
- 使用参数绑定来防止SQL注入
- 大量数据操作时建议使用事务
- 及时关闭不再使用的数据库连接
- 加密数据库需要在创建时指定密码
更新日志
1.0.3 (2025-09-03)
- 适配鸿蒙
1.0.2 (2025-05-18)
- 修复安卓端执行插入数据时,可能会被执行两次。修复安卓/ios端不能使用应用的uni.env.USER_DATA_PATH目录及自定二级目录,在安卓端执行COUNT(*)时类型转换错误。
1.0.1 (2025-05-05)
- 修复安卓端执行插入数据时,可能会被执行两次。
1.0.0 (2025-03-15)
✨ 新功能
- 支持基本的SQLite3数据库操作
- 数据库的创建、打开和关闭
- 表的创建和删除
- 数据的增删改查操作
- 支持数据库加密功能
- 支持事务处理
- 支持批量SQL执行