index.uts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { FMDatabase } from 'FMDB';
  2. import { createSQLiteContextOptions, executeSqlOptions, selectSqlOptions, executeSqlOptionsResult, selectSqlOptionsResult, CreateSQLiteContext, transactionOptions } from '../interface.uts';
  3. import { createSQLiteContextFailImpl } from '../unierror.uts';
  4. class SQLiteContext extends FMDatabase {
  5. private databaseName: string | null;
  6. constructor(name: string) {
  7. let version = 1;
  8. const path = UTSiOS.getDataPath() + '/sqlite/' + name;
  9. super(path);
  10. this.databaseName = name;
  11. }
  12. public executeSql(options: executeSqlOptions) {
  13. const SqlArray = options.sql.split(';');
  14. let result: executeSqlOptionsResult = {
  15. data: [] as boolean[],
  16. errMsg: 'executeSql:ok',
  17. }
  18. try {
  19. for (let i = 0; i < SqlArray.length; i++) {
  20. if (SqlArray[i].length > 0) {
  21. const sql = SqlArray[i].replace(/^\s+/, '');
  22. try {
  23. this.executeQuery(sql);
  24. result.data.push(true);
  25. } catch {
  26. result.data.push(false);
  27. }
  28. }
  29. }
  30. options.success?.(result);
  31. } catch (e) {
  32. const data = result.data;
  33. result = new createSQLiteContextFailImpl(1000002);
  34. result.data = data;
  35. options.fail?.(result);
  36. }
  37. options.complete?.(result);
  38. return result;
  39. }
  40. public selectSql(options: selectSqlOptions) {
  41. const SqlArray = options.sql.split(';');
  42. let result: selectSqlOptionsResult = {
  43. data: [] as boolean[],
  44. errMsg: 'selectSql:ok',
  45. }
  46. try {
  47. for (let i = 0; i < SqlArray.length; i++) {
  48. if (SqlArray[i].length > 0) {
  49. const sql = SqlArray[i].replace(/^\s+/, '');
  50. try {
  51. const cursor = this.executeQueryWithFormat(sql);
  52. //获取查询结果的字符串并push到result.data中
  53. while (cursor.next()) {
  54. const row = cursor.getRow();
  55. result.data.push(row);
  56. }
  57. cursor.close();
  58. } catch {
  59. result.data.push("");
  60. }
  61. }
  62. }
  63. options.success?.(result);
  64. } catch (e) {
  65. const data = result.data;
  66. result = new createSQLiteContextFailImpl(1000003);
  67. result.data = data;
  68. options.fail?.(result);
  69. }
  70. options.complete?.(result);
  71. return result;
  72. }
  73. public transaction(options: transactionOptions) {
  74. const transaction = options.transaction;
  75. let result: executeSqlOptionsResult = {
  76. errMsg: 'transaction:ok',
  77. }
  78. try {
  79. if (transaction == 'begin') {
  80. //开启事务
  81. this.beginTransaction();
  82. } else if (transaction == 'commit') {
  83. //提交事务
  84. this.commit();
  85. } else if (transaction == 'rollback') {
  86. //回滚事务
  87. this.rollback();
  88. }
  89. options.success?.(result);
  90. } catch (e) {
  91. let errCode = 1000008;
  92. if (transaction == 'begin') {
  93. errCode = 1000004;
  94. } else if (transaction == 'commit') {
  95. errCode = 1000005;
  96. } else if (transaction == 'rollback') {
  97. errCode = 1000006;
  98. }
  99. result = new createSQLiteContextFailImpl(errCode);
  100. options.fail?.(result);
  101. }
  102. options.complete?.(result);
  103. return result;
  104. }
  105. }
  106. export const createSQLiteContext: CreateSQLiteContext = function (options: createSQLiteContextOptions) {
  107. const name = options.name + '.db';
  108. return new SQLiteContext(name);
  109. }