Skip to content

x-sqlite-s

简介

x-sqlite-s 是一个用于 uni-appx 的 SQLite 数据库操作插件,支持基本的数据库。

兼容性

HarmonyIOSAndroidWEB小程序
支持支持支持支持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. 加密数据库需要在创建时指定密码

更新日志

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执行
最近更新