Files
2026-09-24 16:25:22 +08:00

218 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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);
```
## 注意事项
1. 在进行数据库操作前,确保已经成功创建/打开数据库
2. 使用参数绑定来防止SQL注入
3. 大量数据操作时建议使用事务
4. 及时关闭不再使用的数据库连接
5. 加密数据库需要在创建时指定密码