autojs-sqlite
Version:
autojs中二代api里esm环境下使用sqlite数据库的orm框架,风格参考sequelize
207 lines (204 loc) • 5.76 kB
TypeScript
/*
* @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;
}