Files
2026-03-16 10:37:46 +08:00

116 lines
3.3 KiB
Plaintext

import { FMDatabase } from 'FMDB';
import { createSQLiteContextOptions, executeSqlOptions, selectSqlOptions, executeSqlOptionsResult, selectSqlOptionsResult, CreateSQLiteContext, transactionOptions } from '../interface.uts';
import { createSQLiteContextFailImpl } from '../unierror.uts';
class SQLiteContext extends FMDatabase {
private databaseName: string | null;
constructor(name: string) {
let version = 1;
const path = UTSiOS.getDataPath() + '/sqlite/' + name;
super(path);
this.databaseName = name;
}
public executeSql(options: executeSqlOptions) {
const SqlArray = options.sql.split(';');
let result: executeSqlOptionsResult = {
data: [] as boolean[],
errMsg: 'executeSql:ok',
}
try {
for (let i = 0; i < SqlArray.length; i++) {
if (SqlArray[i].length > 0) {
const sql = SqlArray[i].replace(/^\s+/, '');
try {
this.executeQuery(sql);
result.data.push(true);
} catch {
result.data.push(false);
}
}
}
options.success?.(result);
} catch (e) {
const data = result.data;
result = new createSQLiteContextFailImpl(1000002);
result.data = data;
options.fail?.(result);
}
options.complete?.(result);
return result;
}
public selectSql(options: selectSqlOptions) {
const SqlArray = options.sql.split(';');
let result: selectSqlOptionsResult = {
data: [] as boolean[],
errMsg: 'selectSql:ok',
}
try {
for (let i = 0; i < SqlArray.length; i++) {
if (SqlArray[i].length > 0) {
const sql = SqlArray[i].replace(/^\s+/, '');
try {
const cursor = this.executeQueryWithFormat(sql);
//获取查询结果的字符串并push到result.data中
while (cursor.next()) {
const row = cursor.getRow();
result.data.push(row);
}
cursor.close();
} catch {
result.data.push("");
}
}
}
options.success?.(result);
} catch (e) {
const data = result.data;
result = new createSQLiteContextFailImpl(1000003);
result.data = data;
options.fail?.(result);
}
options.complete?.(result);
return result;
}
public transaction(options: transactionOptions) {
const transaction = options.transaction;
let result: executeSqlOptionsResult = {
errMsg: 'transaction:ok',
}
try {
if (transaction == 'begin') {
//开启事务
this.beginTransaction();
} else if (transaction == 'commit') {
//提交事务
this.commit();
} else if (transaction == 'rollback') {
//回滚事务
this.rollback();
}
options.success?.(result);
} catch (e) {
let errCode = 1000008;
if (transaction == 'begin') {
errCode = 1000004;
} else if (transaction == 'commit') {
errCode = 1000005;
} else if (transaction == 'rollback') {
errCode = 1000006;
}
result = new createSQLiteContextFailImpl(errCode);
options.fail?.(result);
}
options.complete?.(result);
return result;
}
}
export const createSQLiteContext: CreateSQLiteContext = function (options: createSQLiteContextOptions) {
const name = options.name + '.db';
return new SQLiteContext(name);
}