模拟器运行Android plus.sqlite.executeSql 删除表 成功失败回调都不执行 (链接、创建表、插入数据正常)
import { DBNAME } from "@/common/config";
function asyncExecuteSql(sql: Array<string>, name: string) {
console.log("asyncExecuteSql", sql);
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name,
sql,
success: function (e) {
console.log("executeSql success");
resolve(e);
},
fail: function (e) {
console.log("executeSql failed: " + JSON.stringify(e));
reject(e);
},
});
});
}
function asyncSelectSql(sql: string, name: string) {
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name,
sql,
success: function (e) {
console.log("selectSql success");
resolve(e);
},
fail: function (e) {
console.log("selectSql failed: " + JSON.stringify(e));
reject(e);
},
});
});
}
//
class SQLDB {
// 本地库
db: any;
DBName: string;
//
options: any;
// 默认操作表
defaultTable: string;
asyncExecuteSql = asyncExecuteSql;
asyncSelectSql = asyncSelectSql;
constructor(config: any = {}) {
//
this.DBName = `${DBNAME}.db`;
this.options = {
name: `${this.DBName}`,
path: `_doc/${this.DBName}`, // 数据库文件路径
};
this.defaultTable = config.defaultTable || "notes";
this.initDB();
}
//
async initDB() {
try {
console.log("==> initDB 数据库初始化");
await this.linkDB();
// this.db = res
await this.initTable();
await this.table.delete("note");
console.log("==> initDB 数据库初始化 end");
} catch (error) {
console.error("==> initDB", error);
}
}
//
linkDB() {
return new Promise((resolve, reject) => {
// 如果数据库存在则打开,不存在则创建
plus.sqlite.openDatabase({
...this.options,
success: (res) => {
console.log("openDatabase success");
resolve(res);
},
fail: (e) => {
console.error("openDatabase fail");
reject(e);
},
});
});
}
// isOpenDatabase 判断数据库是否打开
isOpen() {
return plus.sqlite.isOpenDatabase(this.options);
}
closeDB() {
plus.sqlite.closeDatabase({
...this.options,
success: function (e) {
console.log("closeDatabase success!");
},
fail: function (e) {
console.log("closeDatabase failed: " + JSON.stringify(e));
},
});
}
//
async initTable() {
try {
const sql = [
`CREATE TABLE IF NOT EXISTS user(
id INT PRIMARY KEY AUTOINCREMENT,
name VARCHAR(50),
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)`,
`CREATE TABLE IF NOT EXISTS note(
id INT PRIMARY KEY AUTOINCREMENT,
uid INT NOT NULL,
title VARCHAR(255) NOT NULL,
category VARCHAR(100),
categories VARCHAR(255),
contents TEXT,
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (uid) REFERENCES user(id) ON DELETE CASCADE
)`,
];
const res = await asyncExecuteSql(sql, this.options.name);
console.log("==> initTable", res);
} catch (error) {
console.error(",==> initTable", error);
}
}
table = {
// 删除表
async delete(tableName: string) {
const sql = [`DROP TABLE IF EXISTS ${tableName}`];
const res = await asyncExecuteSql(sql, this.DBName);
return res;
},
};
// insert into
async insertInto(data: any = {}) {
//
try {
console.log("insertInto", data);
const sql = [
`INSERT INTO note (title, category, categories, contents, uid) VALUES (
'${data.title}', '${data.category}', '${data.categories}', '${data.contents}', 1
)`,
];
const res = await asyncExecuteSql(sql, this.options.name);
console.log("insertInto", res);
} catch (error) {
console.error("insertInto", error);
}
}
}
const db = new SQLDB();
export default db;
0 个回复