116 lines
3.3 KiB
Plaintext
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);
|
|
} |