| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { CommonModel, NewCommonModel } from './CommonModel';
- import { solveSqlPlaceholders, splicingSQL, SqlStatcParams } from './DBUtils'
- import { query, queryAndReturnInsertId } from './Query';
- import { QueryGenerator } from './QueryGenerator';
- /**
- * 数据库操作工具类 (SQLITE)
- * 如何使用:
- * DB.table('表名') 构造一个查询器
- * DB.select/update/insert/delete 进行SQL查询,其中:
- * SQL中参数使用: {?} {参数索引} 来代表参数占位符,参数在args中传入
- */
- export class DB {
- /**
- * 构造查询器
- * @param name 当前表名
- * @returns 返回构造查询器
- */
- static table<T extends CommonModel = any>(name : string|NewCommonModel<T>) {
- return new QueryGenerator<T>(name);
- }
- /**
- * 进行 select 查询
- * @param sql SQL语句
- * @param args 参数数组
- * @param staticParams 静态参数
- * @returns promise 成功则返回查询到的数组,错误则返回错误信息
- */
- static async select<T>(sql : string, args : unknown[], staticParams : SqlStatcParams = {}) {
- let placeholders = solveSqlPlaceholders(sql);
- let targetSql = splicingSQL(sql, placeholders, args, null, staticParams);
- return await query(targetSql);
- }
- /**
- * 执行 update 查询
- * @param sql SQL语句
- * @param args 参数数组
- * @returns promise 成功则返回受影响的行数,错误则返回错误信息
- */
- static async update(sql : string, args : unknown[]) {
- let placeholders = solveSqlPlaceholders(sql);
- let targetSql = splicingSQL(sql, placeholders, args, null, {});
- return await query(targetSql);
- }
- /**
- * 执行 insert 查询
- * @param sql SQL语句
- * @param args 参数数组
- * @returns promise 成功则返回新插入的ID,错误则返回错误信息
- */
- static async insert(sql : string, args : unknown[]) {
- let placeholders = solveSqlPlaceholders(sql);
- let targetSql = splicingSQL(sql, placeholders, args, null, {});
- return await queryAndReturnInsertId(targetSql);
- }
- /**
- * 执行 delete 查询
- * @param sql SQL语句
- * @param args 参数数组
- * @returns promise 成功则返回受影响的行数,错误则返回错误信息
- */
- static async delete(sql : string, args : unknown[]) {
- let placeholders = solveSqlPlaceholders(sql);
- let targetSql = splicingSQL(sql, placeholders, args, null, {});
- return await query(targetSql);
- }
- /**
- * 手动开始事务
- */
- static beginTransaction() {
- return this.actionSql('BEGIN');
- }
- /**
- * 回滚事务
- */
- static rollBack() {
- return this.actionSql('ROLLBACK');
- }
- /**
- * 提交事务
- */
- static commit() {
- return this.actionSql('COMMIT');
- }
- /**
- * 异步执行sql
- * @param sql
- * @returns
- */
- static async actionSql(sql : string) {
- return await query(sql);
- }
- }
|