UNPKG

autojs-sqlite

Version:

autojs中二代api里esm环境下使用sqlite数据库的orm框架,风格参考sequelize

207 lines (204 loc) 5.76 kB
/* * @Author: 抠脚本人 * @QQ: 742374184 * @Date: 2022-12-16 12:26:33 * @LastEditTime: 2022-12-19 12:36:47 * @Description: 声明文件 * 灵感来之不易,积累创造奇迹 */ import EventEmitter from "events"; /** * 数据类型 */ export const DataTypes: { /** * 日期和时间,DATETIME */ DATE: string; /** * 只有日期,DATE */ DATEONLY: string; /** * 文本,TEXT */ TEXT: string; /** * 数字,INTEGER */ INTEGER: string; /** * 布尔值,TINYINT(1) */ BOOLEAN: string; }; type ItemAttribute = { type: string; primaryKey?: boolean; autoIncrement?: boolean; notNull?: boolean; defaultValue?: string | number; unique?: boolean; }; interface OpenConfig { /** * 是否强制同步。会先删除本地已存在的文件再创建 */ force?: boolean; /** * 数据库版本 */ version?: number; /** * 只读模式 */ readonly?: boolean; } interface RowData { [key: string]: string | number; } interface CreateAttribute { [key: string]: ItemAttribute | string; } interface QueryAttribute { [key: string]: Record<string, string | number> | (string | number); } class Model { /** * 创建一个数据库表格对象 * @param db 安卓数据库对象 * @param tableName 表格名称 */ constructor(db: android.database.sqlite.SQLiteDatabase, tableName: string); /** * 表格名称 */ get tableName(): string; /** * 新增一个数据 * @param data 待新增的数据 * @param update 遇到唯一键约束,是否更新信息。默认为false,返回-1,并打印异常。若为true,返回更新的主键值 * @returns 增加的主键id */ insertItem(data: RowData, update?: boolean): number; /** * 新增多个数据 * @param data 待新增的数据数组 * @param update 遇到唯一键约束,是否更新信息。默认为false,返回-1,并打印异常。若为true,返回更新的主键值 * @returns 增加的主键id数组 */ insert(data: RowData[], update?: boolean): number[]; /** * 删除所有符合条件的数据 * @param value 更新后的值 * @returns 删除的数量 */ delete(where: QueryAttribute): number; /** * 更新所有符合条件的数据 * @param value 更新后的值 * @param where 查询条件 * @returns 修改的数量 */ update(value: { [key: string]: string | number }, where: QueryAttribute): number; /** * 查询符合条件的所有数据组成的数组 * @param where 查询条件,参数省略时,查询所有结果 * @returns 查询结果 */ query(where?: QueryAttribute): Array<RowData>; /** * 查询符合条件的一条数据 * @param where 查询条件,参数省略时,查询所有结果 * @returns 查询结果 */ findOne(where: QueryAttribute): RowData | null; /** * 查询符合条件的一条数据 * @param id 主键值 * @returns 查询结果 */ findByPk(id: string | number): RowData | null; /** * 查询符合条件的数量 * @param where 计数条件,参数省略时,计数所有结果 * @returns 总数 */ count(where?: QueryAttribute): number; } export class SQLite { /** * 在开启事务时,可通过emitter.on(EventName, ()=> void) 获取事件 * EventName有 "begin","commit","rollback" */ emitter: EventEmitter; /** * 构造一个数据string * @param name 数据库文件名 * @param options 数据库打开配置 * @return sqlite数据库 */ constructor(name: string, options?: OpenConfig); get version(): number; get pageSize(): number; get maximumSize(): number; get path(): string; get inTransaction(): boolean; /** * 通过表格名获取一个已存在的表格对象,若不存在,返回null * @param tableName 表格名 */ getTable(tableName: string): Model | null; /** * 使用封装的配置项格式创建数据库表格 * @param tableName 表格名 * @param attributes 表格创建配置项,包括键名和类型等 * @return 数据库表格对象 */ createTable(tableName: string, attributes: CreateAttribute): Model; /** * 使用常规的SQL语法创建数据库表格 * @param tableName 表格名 * @param sql 常规的SQL语句 * @return 数据库表格对象 */ rawCreateTable(tableName: string, sql: string): Model; /** * 使用常规的SQL语法查询 * @param sql 常规的SQL查询语句 * @param binding sql中出现的占位符变量 * @return 查询到的值数组 */ rawQuery(sql: string, binding?: Array<string | number>): Array<RowData>; /** * 使用常规的SQL语法操作数据库,没有返回值 * @see https://developer.android.google.cn/reference/android/database/sqlite/SQLiteDatabase?hl=en#execSQL(java.lang.String) * @param sql 常规的SQL操作语句 * @param binding sql中出现的占位符变量 */ rawSql(sql: string, binding?: Array<string | number>): void; /** * 开启数据库事务 * @param callback 事务开启后的回调 * @returns */ begin(callback: (sqlite: this) => void): EventEmitter; /** * 结束数据库事务 */ end(): void; /** * 将当前事务标记为成功。标记成功后不要对数据库进行其他操作,尽快调用end * @see https://developer.android.google.cn/reference/android/database/sqlite/SQLiteDatabase?hl=en#setTransactionSuccessful() */ succeed(): void; /** * 提交并立即结束事务,相当于succeed()后end() */ merge(): void; /** * 关闭数据库对象的引用 * @see https://developer.android.google.cn/reference/android/database/sqlite/SQLiteClosable?hl=en#close() */ close(): void; }