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[];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user