Initial commit
This commit is contained in:
3
uni_modules/ak-sqlite/utssdk/app-android/config.json
Normal file
3
uni_modules/ak-sqlite/utssdk/app-android/config.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"minSdkVersion": "21"
|
||||
}
|
||||
178
uni_modules/ak-sqlite/utssdk/app-android/index.uts
Normal file
178
uni_modules/ak-sqlite/utssdk/app-android/index.uts
Normal file
@@ -0,0 +1,178 @@
|
||||
import Cursor from 'android.database.Cursor';
|
||||
import SQLiteDatabase from 'android.database.sqlite.SQLiteDatabase';
|
||||
import SQLiteOpenHelper from 'android.database.sqlite.SQLiteOpenHelper';
|
||||
|
||||
import { createSQLiteContextOptions, executeSqlOptions, selectSqlOptions, executeSqlOptionsResult, selectSqlOptionsResult, transactionOptions,transactionResult } from '../interface.uts';
|
||||
|
||||
class SQLiteContext extends SQLiteOpenHelper {
|
||||
private databaseName: string | null;
|
||||
|
||||
constructor(name: string) {
|
||||
super(UTSAndroid.getAppContext()!, name, null, 1);
|
||||
this.databaseName = name;
|
||||
}
|
||||
|
||||
public executeSql(options: executeSqlOptions): void {
|
||||
const database: SQLiteDatabase = this.getReadableDatabase();
|
||||
const SqlArray = options.sql.split(';');
|
||||
let result: executeSqlOptionsResult = {
|
||||
data: [] as boolean[],
|
||||
errMsg: 'executeSql:ok',
|
||||
errCode: 0,
|
||||
errSubject: '',
|
||||
cause: null
|
||||
}
|
||||
try {
|
||||
for (let i = 0; i < SqlArray.length; i++) {
|
||||
if (SqlArray[i].length > 0) {
|
||||
const sql = SqlArray[i].replace(/^\s+/, '');
|
||||
try {
|
||||
database.execSQL(sql);
|
||||
result.data.push(true);
|
||||
} catch (err) {
|
||||
console.error('database.execSQL 出错:', err, 'SQL:', sql);
|
||||
result.data.push(false);
|
||||
// 立即调用 fail 并返回
|
||||
result.errMsg = 'executeSql:fail';
|
||||
result.errCode = 1000002;
|
||||
result.cause = err;
|
||||
options.fail?.(result);
|
||||
options.complete?.(result);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
options.success?.(result);
|
||||
} catch (e) {
|
||||
console.error('executeSql 外层出错:', e);
|
||||
const data = result.data;
|
||||
result = {
|
||||
errCode: 1000002,
|
||||
errMsg: 'executeSql:fail',
|
||||
errSubject: '',
|
||||
cause: e,
|
||||
data: data
|
||||
};
|
||||
options.fail?.(result);
|
||||
}
|
||||
options.complete?.(result);
|
||||
}
|
||||
|
||||
public selectSql(options: selectSqlOptions): void {
|
||||
const database: SQLiteDatabase = this.getReadableDatabase();
|
||||
const SqlArray = options.sql.split(';');
|
||||
let result: selectSqlOptionsResult = {
|
||||
data: [] as string[][],
|
||||
errMsg: 'selectSql:ok',
|
||||
errCode: 0,
|
||||
errSubject: '',
|
||||
cause: null
|
||||
}
|
||||
try {
|
||||
for (let i = 0; i < SqlArray.length; i++) {
|
||||
if (SqlArray[i].length > 0) {
|
||||
const sql = SqlArray[i].replace(/^\s+/, '');
|
||||
try {
|
||||
const cursor: Cursor = database.rawQuery(sql, null);
|
||||
//获取查询结果的字符串并push到result.data中
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
const row = cursor.getColumnCount();
|
||||
const rowArray = [] as string[];
|
||||
for (let j = 0; j < row; j++) {
|
||||
rowArray.push(cursor.getString(j.toInt()));
|
||||
}
|
||||
result.data.push(rowArray);
|
||||
} while (cursor.moveToNext());
|
||||
}
|
||||
cursor.close();
|
||||
} catch {
|
||||
result.data.push([] as string[]);
|
||||
}
|
||||
}
|
||||
}
|
||||
options.success?.(result);
|
||||
} catch (e) {
|
||||
const data = result.data;
|
||||
result = {
|
||||
errCode: 1000003,
|
||||
errMsg: 'selectSql:fail',
|
||||
errSubject: '',
|
||||
cause: e,
|
||||
data: data
|
||||
};
|
||||
options.fail?.(result);
|
||||
}
|
||||
options.complete?.(result);
|
||||
}
|
||||
|
||||
public transaction(options: transactionOptions): void {
|
||||
const database: SQLiteDatabase = this.getReadableDatabase();
|
||||
const transaction = options.transaction;
|
||||
let result: transactionResult = {
|
||||
errMsg: 'transaction:ok',
|
||||
errCode: 0,
|
||||
errSubject: '',
|
||||
cause: null
|
||||
};
|
||||
try {
|
||||
if (transaction == 'begin') {
|
||||
database.execSQL('BEGIN TRANSACTION');
|
||||
} else if (transaction == 'commit') {
|
||||
database.execSQL('COMMIT');
|
||||
} else if (transaction == 'rollback') {
|
||||
database.execSQL('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 = {
|
||||
errCode: errCode,
|
||||
errMsg: 'transaction:fail',
|
||||
errSubject: '',
|
||||
cause: e
|
||||
};
|
||||
options.fail?.(result);
|
||||
}
|
||||
options.complete?.(result);
|
||||
}
|
||||
|
||||
public override onCreate(db: SQLiteDatabase): void {
|
||||
// 可选:初始化表结构
|
||||
}
|
||||
|
||||
public override onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int): void {
|
||||
// 可选:数据库升级逻辑
|
||||
}
|
||||
}
|
||||
|
||||
export const createSQLiteContext = function (options: createSQLiteContextOptions) {
|
||||
const name = options.name + '.db';
|
||||
return new SQLiteContext(name); // 必须返回对象
|
||||
}
|
||||
|
||||
|
||||
|
||||
export type executeSqlOptionsResultType = {
|
||||
errCode: number;
|
||||
errSubject?: string;
|
||||
cause?: any;
|
||||
errMsg: string;
|
||||
date?: boolean[];
|
||||
};
|
||||
|
||||
export type selectSqlOptionsResultType = {
|
||||
errCode: number;
|
||||
errSubject?: string;
|
||||
cause?: any;
|
||||
errMsg: string;
|
||||
date?: string[];
|
||||
};
|
||||
|
||||
13
uni_modules/ak-sqlite/utssdk/app-ios/config.json
Normal file
13
uni_modules/ak-sqlite/utssdk/app-ios/config.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"deploymentTarget": "9.0",
|
||||
"dependencies-pods": [
|
||||
{
|
||||
"name": "FMDB",
|
||||
"version": "2.7.8",
|
||||
"repo": {
|
||||
"git": "https://github.com/ccgus/fmdb.git",
|
||||
"tag": "2.7.8"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
116
uni_modules/ak-sqlite/utssdk/app-ios/index.uts
Normal file
116
uni_modules/ak-sqlite/utssdk/app-ios/index.uts
Normal file
@@ -0,0 +1,116 @@
|
||||
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);
|
||||
}
|
||||
153
uni_modules/ak-sqlite/utssdk/interface.uts
Normal file
153
uni_modules/ak-sqlite/utssdk/interface.uts
Normal file
@@ -0,0 +1,153 @@
|
||||
/**
|
||||
* 初始化数据库时的相关配置
|
||||
* @param name 数据库名称
|
||||
*/
|
||||
export type createSQLiteContextOptions = {
|
||||
/**
|
||||
* 数据库名称
|
||||
*/
|
||||
name: string,
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行增删改等操作的SQL语句的相关配置
|
||||
* @param sql SQL语句
|
||||
* @param success 成功回调
|
||||
* @param fail 失败回调
|
||||
* @param complete 完成回调
|
||||
*/
|
||||
export type executeSqlOptions = {
|
||||
/**
|
||||
* SQL语句
|
||||
*/
|
||||
sql: string,
|
||||
/**
|
||||
* 执行增删改等操作的SQL语句的成功回调
|
||||
*/
|
||||
success?: executeSqlOptionsSuccessCallback | null,
|
||||
/**
|
||||
* 执行增删改等操作的SQL语句的失败回调
|
||||
*/
|
||||
fail?: executeSqlOptionsFailCallback | null,
|
||||
/**
|
||||
* 执行增删改等操作的SQL语句的完成回调
|
||||
*/
|
||||
complete?: executeSqlOptionsCompleteCallback | null,
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行增删改等操作的SQL语句的成功回调
|
||||
*/
|
||||
export type executeSqlOptionsSuccessCallback = (res: executeSqlOptionsResult) => void
|
||||
|
||||
/**
|
||||
* 执行增删改等操作的SQL语句的失败回调
|
||||
*/
|
||||
export type executeSqlOptionsFailCallback = (res: executeSqlOptionsResult) => void
|
||||
|
||||
/**
|
||||
* 执行增删改等操作的SQL语句的完成回调
|
||||
*/
|
||||
export type executeSqlOptionsCompleteCallback = (res: executeSqlOptionsResult) => void
|
||||
|
||||
export type transactionResult = {
|
||||
errCode: number;
|
||||
errSubject?: string;
|
||||
cause?: any;
|
||||
errMsg: string;
|
||||
};
|
||||
|
||||
export type ICreateSQLiteContextError = {
|
||||
errCode: number;
|
||||
errSubject?: string;
|
||||
cause?: any;
|
||||
errMsg: string;
|
||||
};
|
||||
|
||||
export type executeSqlOptionsResult = {
|
||||
errCode: number;
|
||||
errSubject?: string;
|
||||
cause?: any;
|
||||
errMsg: string;
|
||||
data: boolean[];
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行查询操作的SQL语句的相关配置
|
||||
*/
|
||||
export type selectSqlOptions = {
|
||||
/**
|
||||
* SQL语句
|
||||
*/
|
||||
sql: string,
|
||||
/**
|
||||
* 执行查询操作的SQL语句的成功回调
|
||||
*/
|
||||
success?: selectSqlOptionsSuccessCallback | null,
|
||||
/**
|
||||
* 执行查询操作的SQL语句的失败回调
|
||||
*/
|
||||
fail?: selectSqlOptionsFailCallback | null,
|
||||
/**
|
||||
* 执行查询操作的SQL语句的完成回调
|
||||
*/
|
||||
complete?: selectSqlOptionsCompleteCallback | null,
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行查询操作的SQL语句的成功回调
|
||||
*/
|
||||
export type selectSqlOptionsSuccessCallback = (res: selectSqlOptionsResult) => void
|
||||
|
||||
/**
|
||||
* 执行查询操作的SQL语句的失败回调
|
||||
*/
|
||||
export type selectSqlOptionsFailCallback = (res: selectSqlOptionsResult) => void
|
||||
|
||||
/**
|
||||
* 执行查询操作的SQL语句的完成回调
|
||||
*/
|
||||
export type selectSqlOptionsCompleteCallback = (res: selectSqlOptionsResult) => void
|
||||
|
||||
|
||||
export type selectSqlOptionsResult = {
|
||||
errCode: number;
|
||||
errSubject?: string;
|
||||
cause?: any;
|
||||
errMsg: string;
|
||||
data: string[][];
|
||||
}
|
||||
|
||||
|
||||
export type transactionOptions = {
|
||||
transaction: transactionOperation;
|
||||
success?: (res: transactionResult) => void;
|
||||
fail?: (res: transactionResult) => void;
|
||||
complete?: (res: transactionResult) => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* 事务操作类型
|
||||
* @param begin 开始事务
|
||||
* @param commit 提交事务
|
||||
* @param rollback 回滚事务
|
||||
*/
|
||||
export type transactionOperation = 'begin' | 'commit' | 'rollback'
|
||||
|
||||
/**
|
||||
* 事务执行的成功回调
|
||||
*/
|
||||
export type transactionSuccessCallback = (res: transactionResult) => void
|
||||
|
||||
/**
|
||||
* 事务执行的失败回调
|
||||
*/
|
||||
export type transactionFailCallback = (res: transactionResult) => void
|
||||
|
||||
/**
|
||||
* 事务执行的完成回调
|
||||
*/
|
||||
export type transactionCompleteCallback = (res: transactionResult) => void
|
||||
|
||||
|
||||
|
||||
65
uni_modules/ak-sqlite/utssdk/unierror.uts
Normal file
65
uni_modules/ak-sqlite/utssdk/unierror.uts
Normal file
@@ -0,0 +1,65 @@
|
||||
import { ICreateSQLiteContextError } from "./interface.uts"
|
||||
|
||||
/**
|
||||
* 错误主题
|
||||
*/
|
||||
export const UniErrorSubject = 'uni-create-sql-context';
|
||||
|
||||
/**
|
||||
* 错误码
|
||||
* @UniError
|
||||
*/
|
||||
export const UniErrors: Map<number, string> = new Map([
|
||||
/**
|
||||
* 数据库启动失败
|
||||
*/
|
||||
[1000001, 'Database startup failed'],
|
||||
/**
|
||||
* 执行SQL增删改语句失败
|
||||
*/
|
||||
[1000002, 'Failed to execute SQL insert, update, delete statement'],
|
||||
/**
|
||||
* 执行SQL查询语句失败
|
||||
*/
|
||||
[1000003, 'Failed to execute SQL query statement'],
|
||||
/**
|
||||
* 事务开始失败
|
||||
*/
|
||||
[1000004, 'Transaction start failed'],
|
||||
/**
|
||||
* 事务提交失败
|
||||
*/
|
||||
[1000005, 'Transaction commit failed'],
|
||||
/**
|
||||
* 事务回滚失败
|
||||
*/
|
||||
[1000006, 'Transaction rollback failed'],
|
||||
/**
|
||||
* 数据库关闭失败
|
||||
*/
|
||||
[1000007, 'Database shutdown failed'],
|
||||
/**
|
||||
* 未知错误
|
||||
*/
|
||||
[1000008, 'Unknown error'],
|
||||
]);
|
||||
|
||||
export class createSQLiteContextFailImpl extends UniError {
|
||||
override errCode: number;
|
||||
override errSubject: string;
|
||||
override cause?: UTSError | null;
|
||||
override errMsg: string;
|
||||
|
||||
constructor(
|
||||
errCode: number,
|
||||
errMsg: string = '',
|
||||
errSubject: string = '',
|
||||
cause?: UTSError | null
|
||||
) {
|
||||
super();
|
||||
this.errCode = errCode;
|
||||
this.errMsg = errMsg;
|
||||
this.errSubject = errSubject;
|
||||
this.cause = cause ?? null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user