DB.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { CommonModel, NewCommonModel } from './CommonModel';
  2. import { solveSqlPlaceholders, splicingSQL, SqlStatcParams } from './DBUtils'
  3. import { query, queryAndReturnInsertId } from './Query';
  4. import { QueryGenerator } from './QueryGenerator';
  5. /**
  6. * 数据库操作工具类 (SQLITE)
  7. * 如何使用:
  8. * DB.table('表名') 构造一个查询器
  9. * DB.select/update/insert/delete 进行SQL查询,其中:
  10. * SQL中参数使用: {?} {参数索引} 来代表参数占位符,参数在args中传入
  11. */
  12. export class DB {
  13. /**
  14. * 构造查询器
  15. * @param name 当前表名
  16. * @returns 返回构造查询器
  17. */
  18. static table<T extends CommonModel = any>(name : string|NewCommonModel<T>) {
  19. return new QueryGenerator<T>(name);
  20. }
  21. /**
  22. * 进行 select 查询
  23. * @param sql SQL语句
  24. * @param args 参数数组
  25. * @param staticParams 静态参数
  26. * @returns promise 成功则返回查询到的数组,错误则返回错误信息
  27. */
  28. static async select<T>(sql : string, args : unknown[], staticParams : SqlStatcParams = {}) {
  29. let placeholders = solveSqlPlaceholders(sql);
  30. let targetSql = splicingSQL(sql, placeholders, args, null, staticParams);
  31. return await query(targetSql);
  32. }
  33. /**
  34. * 执行 update 查询
  35. * @param sql SQL语句
  36. * @param args 参数数组
  37. * @returns promise 成功则返回受影响的行数,错误则返回错误信息
  38. */
  39. static async update(sql : string, args : unknown[]) {
  40. let placeholders = solveSqlPlaceholders(sql);
  41. let targetSql = splicingSQL(sql, placeholders, args, null, {});
  42. return await query(targetSql);
  43. }
  44. /**
  45. * 执行 insert 查询
  46. * @param sql SQL语句
  47. * @param args 参数数组
  48. * @returns promise 成功则返回新插入的ID,错误则返回错误信息
  49. */
  50. static async insert(sql : string, args : unknown[]) {
  51. let placeholders = solveSqlPlaceholders(sql);
  52. let targetSql = splicingSQL(sql, placeholders, args, null, {});
  53. return await queryAndReturnInsertId(targetSql);
  54. }
  55. /**
  56. * 执行 delete 查询
  57. * @param sql SQL语句
  58. * @param args 参数数组
  59. * @returns promise 成功则返回受影响的行数,错误则返回错误信息
  60. */
  61. static async delete(sql : string, args : unknown[]) {
  62. let placeholders = solveSqlPlaceholders(sql);
  63. let targetSql = splicingSQL(sql, placeholders, args, null, {});
  64. return await query(targetSql);
  65. }
  66. /**
  67. * 手动开始事务
  68. */
  69. static beginTransaction() {
  70. return this.actionSql('BEGIN');
  71. }
  72. /**
  73. * 回滚事务
  74. */
  75. static rollBack() {
  76. return this.actionSql('ROLLBACK');
  77. }
  78. /**
  79. * 提交事务
  80. */
  81. static commit() {
  82. return this.actionSql('COMMIT');
  83. }
  84. /**
  85. * 异步执行sql
  86. * @param sql
  87. * @returns
  88. */
  89. static async actionSql(sql : string) {
  90. return await query(sql);
  91. }
  92. }